A personal productivity dashboard built with SvelteKit 5 (runes) + Supabase. Track goals, books, kanban tasks, partner date ideas, and earn XP as you progress.
- Frontend: SvelteKit 5 (Svelte runes) + TypeScript
- Build: Vite
- Server:
@sveltejs/adapter-node - Database & Auth: Supabase (PostgreSQL + RLS)
- Storage: Supabase Storage (photo uploads)
git clone <your-repo>
cd vitacora
npm install- Go to supabase.com and create a new project
- In Project Settings → API, copy:
- Project URL →
PUBLIC_SUPABASE_URL - anon / public key →
PUBLIC_SUPABASE_ANON_KEY
- Project URL →
cp .env.example .env
# Edit .env and paste your Supabase credentialsGo to Supabase Dashboard → SQL Editor and paste the entire contents of:
supabase/migrations/001_initial.sql
Click Run. This creates all tables, enables RLS policies, and seeds badges.
In Supabase Dashboard → Storage → New Bucket:
- Name:
memories - Public: ✓ (checked)
Then in Storage → Policies → memories, add these policies (or run the commented SQL at the bottom of the migration file):
| Operation | Policy |
|---|---|
| INSERT | auth.uid()::text = (storage.foldername(name))[1] |
| SELECT | auth.uid()::text = (storage.foldername(name))[1] |
| DELETE | auth.uid()::text = (storage.foldername(name))[1] |
npm run devVisit http://localhost:5173 → You'll be redirected to /auth to sign up.
| Section | Features |
|---|---|
| Dashboard | Global XP level, area bars, today's tasks, books in progress, expense pie chart |
| Visión & Metas | Vision board, motivational phrases, books, learning, memory album, calendar, success experiences, rewards, expenses tracker with category/month filters |
| Trabajo | Kanban board (drag & drop), projects grid, useful links, skills.md editor |
| Partner | Unique 6-char code for connection, connect with partner, shared date ideas list with purple indicator, random picker, mark as done, disconnect option |
| Perfil & XP | XP per area, global level, badges/achievements, activity log, export as PNG |
| Notifications | Toast notifications, bell icon with unread badge, auto-alerts for due tasks and calendar events |
| Action | XP |
|---|---|
| Task completed | 10 |
| Book finished | 50 |
| Book page update | 2 |
| Success experience | 30 |
| Learning topic added | 15 |
| Memory added | 5 |
| Reward earned | 20 |
Share your unique 6-character code with your partner to connect and share date ideas:
- Visit Partner page - your code is displayed automatically
- Copy your code and share it with your partner
- Partner enters your code in "Conectar con pareja" form
- Once connected, both see each other's date ideas (marked with purple border)
- Either partner can disconnect at any time
No new tables needed - uses existing Supabase user metadata (partner_code, partner_id).
To embed your Canva vision board, edit src/routes/goals/+page.svelte and replace the placeholder section:
<!-- Replace this comment with your embed: -->
<iframe
src="YOUR_CANVA_EMBED_URL"
title="Vision Board"
width="100%"
height="500"
frameborder="0"
allowfullscreen
></iframe>npm run buildThe output is in build/. Run it with Node.js:
node build/index.jsSet the PORT environment variable if needed (default: 3000).
- Push your code to a Git repo
- Set environment variables on your hosting platform:
PUBLIC_SUPABASE_URLPUBLIC_SUPABASE_ANON_KEY
- Build command:
npm run build - Start command:
node build/index.js
npm install -g railway
railway login
railway init
railway add
railway upSet env vars in Railway dashboard.
src/
├── app.css # Global design system
├── app.html # HTML shell (Google Fonts loaded here)
├── app.d.ts # TypeScript declarations
├── hooks.server.ts # Supabase SSR session handling
├── lib/
│ ├── supabase.ts # Supabase client
│ ├── types/index.ts # All TypeScript types
│ ├── utils/xp.ts # XP logic, levels, badges
│ └── components/
│ └── Sidebar.svelte
└── routes/
├── +layout.server.ts
├── +layout.svelte
├── +page.svelte # Redirect to /dashboard or /auth
├── auth/+page.svelte
├── dashboard/+page.svelte
├── goals/+page.svelte
├── work/+page.svelte
├── partner/+page.svelte
└── profile/+page.svelte
supabase/
└── migrations/
└── 001_initial.sql
- Colors: Edit CSS variables in
src/app.css(:root { }block) - XP values: Edit
XP_VALUESinsrc/lib/utils/xp.ts - Badges: Edit
PREDEFINED_BADGESinsrc/lib/utils/xp.ts - Date ideas: Pre-seeded on first login from
src/routes/partner/+page.svelte
Personal use. Built with ♥