2.9 KiB
2.9 KiB
Project: BarkWho
Role: Senior Full-Stack Engineer / Home Lab Architect Objective: Build a self-hosted, local parental control dashboard ("BarkWho") that interfaces with a UniFi Dream Router (UDR) to manage family internet access.
1. Core Technical Requirements
- Framework: React (Vite) Frontend + Node.js (Express) Backend.
- Infrastructure: Docker Compose (Service 1: Frontend, Service 2: Backend).
- Target Hardware: UniFi Dream Router (Local API).
- Primary Logic:
- UI "Allow" (Green) = Backend calls UniFi to DISABLE the blocking rule.
- UI "Block" (Red) = Backend calls UniFi to ENABLE the blocking rule.
- Note: To toggle a rule, you must fetch the entire rule object, modify the
enabledproperty, and PUT the full payload back to the UDR.
2. API Implementation Details (UDR Local API)
- Auth:
POST https://<UDR_IP>/api/auth/login(Body: username, password). - Session: Extract the
unifisescookie andx-csrf-tokenfrom response headers for all subsequent calls. - Traffic Rule Endpoint:
/proxy/network/v2/api/site/default/trafficrules - Method for Toggle:
PUT /proxy/network/v2/api/site/default/trafficrules/{rule_id}
3. Version 1 Features (Functional Requirements)
FR1: The Bark-Style Policy Engine
Map one UI "Category" to an array of UniFi Rule IDs in a policy_map.json:
- Social Media: [Rule_ID_TikTok, Rule_ID_Instagram]
- Streaming: [Rule_ID_Netflix, Rule_ID_Hulu]
- Adult Content: [Rule_ID_Adult_Filter]
- Gaming: [Rule_ID_Roblox, Rule_ID_Fortnite]
FR2: Device Library & Dynamic Groups
- Discovery: Fetch all clients via
/proxy/network/api/s/default/stat/sta. - Assignment: Implement a way to add/remove a device's MAC address to/from the "Kids" IP Group profile in UniFi.
- "Nuke" Button: A high-visibility button for each device to instantly kill its connectivity.
FR3: "Bonus Time" Timer System
- Presets: 15m, 30m, 60m.
- Custom: Manual minute/hour entry.
- Reliability: Timers must persist in a
timers.jsonfile so they resume after a container restart.
FR4: Automated Curfew (Bedtime)
- Schedule: Integrated
node-cronto enable the "Total Internet Block" at 9:00 PM and disable it at 7:00 AM.
4. UI/UX & Aesthetic Guidelines
- Theme: Dark Academia Tech.
- Palette:
- Background: Deep Viridian (#2E473B) with circuit/blueprint overlays.
- Text/Icons: Cream (#F5F5DC).
- Status Indicators: Vibrant Green for "Active/Allowed", Deep Red/Magenta for "Blocked/Nuke".
- Design Layout:
- Mobile-first PWA (iPad/iPhone optimized).
- Bottom Navigation: [Control Dashboard] | [Device Library].
- Use Framer Motion for the "Slide-up" Bonus Time drawer.
5. Deployment Instructions
- Provide a
docker-compose.ymlthat mounts a/datavolume for persistent JSON state. - Use a
.envfile for:UDR_IP,UDR_USER,UDR_PASSWORD,APP_SECRET_KEY.