012385e9e1680e37d5234f963838678b0e5d8d22
- Add @custom-variant dark in globals.css for class-based dark mode - Add ThemeToggle component with localStorage persistence and system preference fallback - Inject blocking inline script in layout to prevent flash on load - Apply dark: variants across all components (layout, site-nav, home-dashboard, expense-workspace, paycheck-workspace, recurring-expense-manager) and page headers - Create openspec/changes/theming-dark-mode with proposal, design, and tasks artifacts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Monthy Tracker
Private monthly expense tracking with local-first storage, offline category suggestions, and offline monthly insights via Ollama.
Local app
- Install dependencies:
npm install
- Create env config from
.env.exampleand keep your local runtime settings:
cp .env.example .env
- Apply migrations and start the app:
npx prisma migrate deploy
npm run dev
- Keep
Ollamarunning with the configured model:
ollama serve
ollama pull qwen3.5:9b
Docker Compose
Run the app in Docker while keeping Ollama on the host:
docker compose up --build
This compose stack will:
- start only the Next.js app on
http://localhost:3000 - keep SQLite data in a named Docker volume
- connect to host
Ollamathroughhost.docker.internal
Before running Docker Compose, make sure host Ollama is already up:
ollama serve
ollama pull qwen3.5:9b
If you run the app outside Docker, keep using:
OLLAMA_URL=http://127.0.0.1:11434/
In-app helpers
- Use the dashboard runtime panel to refresh Ollama status.
- If the configured model is missing, use
Pull configured modelfrom the UI. - Use
Download backupto export the current SQLite database file.
Environment
DATABASE_URL- Prisma SQLite connection stringOLLAMA_URL- Ollama base URL; in Docker Compose this defaults tohttp://host.docker.internal:11434/OLLAMA_MODEL- selected model tag, defaultqwen3.5:9b
Description
Languages
TypeScript
98.8%
CSS
0.4%
Dockerfile
0.4%
JavaScript
0.4%