🇳🇴 Norsk
A family weekly planner – tasks, calendar, dinner plan, and shopping list in one place.
- Weekly tasks with per-child progress tracking and motivational tips
- Calendar integration via iCal (Google Calendar, Outlook, and others)
- Dinner planner with recipe inspiration from matprat.no
- Microsoft To-Do integration – add recipe ingredients to a shared shopping list
- Family messages board for quick notes on the home screen
- Dark mode, per-feature toggles, and PIN protection
- Norwegian and English language support
- SQLite database – all data stored locally
docker-compose up -dOpen http://localhost:3001. Data is stored in a Docker volume and survives restarts.
docker-compose down # stop
docker-compose down -v # stop and delete all dataSee COSMOS.md for setup behind a reverse proxy with automatic HTTPS.
npm install
npm run dev:server # Express API on port 3001
npm run dev # Vite frontend on port 5173 (proxies /api automatically)The app has built-in PIN protection. Change the PIN before exposing it to the internet:
# docker-compose.yml
environment:
- ADMIN_PIN=your_secret_pinThe admin panel always requires a PIN. To protect the entire app (recommended when accessible over the internet, since the calendar is visible on the home screen):
Settings → General → Security → "Require PIN for home screen"
The session token lasts 8 hours and is stored in localStorage.
Failed login attempts trigger progressive lockouts: 3 failures → 1 min, 6 → 5 min, 10 → 30 min, 15 → 2 hours.
The app displays events from any calendar that provides an iCal feed — Google Calendar, Outlook, Apple Calendar, and others.
Google Calendar
- Open calendar.google.com and go to Settings.
- Click the calendar you want to share, then scroll to Integrate calendar.
- Copy the Secret address in iCal format (keeps the feed private).
Outlook / Microsoft 365
- Go to outlook.live.com → Settings → View all Outlook settings → Calendar → Shared calendars.
- Under Publish a calendar, select a calendar and permission level, then click Publish.
- Copy the ICS link.
Apple Calendar (iCloud)
- Open icloud.com/calendar and click the share icon next to a calendar.
- Enable Public Calendar and copy the link.
- Open the app and go to Settings → Calendar.
- Paste the iCal URL and save.
Events from the next 14 days are shown on the home screen. The calendar refreshes automatically every 5 minutes.
The integration lets you add ingredients from Matprat recipes directly to a shared Microsoft To-Do list (e.g. a household shopping list). One authorization covers the whole household – no per-device login required.
- A free personal Microsoft account (Outlook, Hotmail, Live, or Xbox)
- The app must be reachable at a public URL (needed for the OAuth callback)
- Go to portal.azure.com and sign in with your Microsoft account.
- Navigate to Microsoft Entra ID → App registrations → New registration.
- Fill in:
- Name: anything, e.g.
kidstaskmgr - Supported account types: Personal Microsoft accounts only
- Redirect URI: platform Web, value
https://your-public-url/api/todo/callback
- Name: anything, e.g.
- Click Register and note the Application (client) ID.
- Go to Certificates & secrets → New client secret, set an expiry, and copy the Value (shown once).
- Go to API permissions → Add a permission → Microsoft Graph → Delegated permissions and add:
Tasks.ReadWriteUser.Read
The two permissions only require user consent during the OAuth flow – no admin approval needed.
Add the three variables to docker-compose.yml:
environment:
- MICROSOFT_CLIENT_ID=your-application-client-id
- MICROSOFT_CLIENT_SECRET=your-client-secret-value
- APP_URL=https://your-public-urlAPP_URL must match the base of the redirect URI you registered (no trailing slash). Restart the container after changing it.
- Open the app and go to Settings → Microsoft To-Do.
- Click Connect Microsoft account and complete the sign-in in the popup.
- Select which To-Do list to use as the shopping list.
- A shopping cart icon now appears on meal plan rows that have a recipe URL. Click it to open the ingredient picker, select what you need, and add them to the list.
Go to Settings → Microsoft To-Do → Disconnect. This removes the stored tokens from the database. You can reconnect at any time.
Port 3001 in use:
# Windows
netstat -ano | findstr :3001
# Mac/Linux
lsof -i :3001Container won't start:
docker-compose logs -fReset everything:
docker-compose down -v && docker-compose up -d --buildSee CHANGELOG.md.
Private project for family use.