Skip to content

EntangledQuantum/focusspace

Repository files navigation

FocusSpace

FocusSpace

One task. One timer. Your music, your data, and a space that disappears around your work.

🌐 focusspace.live


What is FocusSpace?

FocusSpace is a modern Pomodoro + productivity tracker built around a single idea: do one thing at a time. You pick a task, run the timer, and review the data β€” without the clutter, gamification, or feeds that most "productivity" apps bury you in.

It pairs a distraction-free focus screen with full project/task management, Spotify playback, rich analytics, living wallpapers, and an optional Focus AI assistant that edits your board for you in plain language. It's also fully open source β€” self-host it, audit it, or make it yours.


πŸ“Έ Screenshots

🏠 Home

image image

The public landing page: an animated aurora that drifts with your cursor and bursts on click, a live demo timer ring, a rotating headline, the feature grid, and the Focus AI banner.

Focus Area

image

After you login this timer will show up

πŸ—‚οΈ Projects

Screenshot placeholder β€” add docs/screenshots/projects.png

Stacked glass project cards with tasks, subtasks, tags, priority and pomodoro estimates β€” plus a one-tap Run pill that switches the active task and jumps straight into a focus session.


✨ Features

  • 🎯 Distraction-free focus screen β€” a solo gradient timer ring, the active task, and transport controls. Nothing else competes for your attention.
  • ⏱️ Dual-mode timer β€” classic Pomodoro blocks or a Custom Target duration, with smart breaks, auto-start, and a per-task session timeline.
  • πŸ—‚οΈ Projects, tasks, subtasks & tags β€” full CRUD with notes, priorities, pomodoro estimates, and collapsible subtask checklists. Pick which projects to show, or show them all.
  • πŸ€– Focus AI assistant (optional) β€” open Ask AI on the Projects tab and dictate changes in plain language:
    • Add projects, tasks, and subtasks from a sentence
    • Edit & modify existing tasks β€” rename, retag, re-estimate, move, complete
    • Search your tasks and read your focus stats ("how long did I focus this week?")
    • Every action runs under your own row-level-secured session, renders as a live action card, and updates the board instantly. Conversations are saved to your own history.
  • 🎡 Spotify built in β€” Web Playback SDK player with search, playlists, your library, volume/shuffle, external-device takeover, and a pop-out mini player.
  • πŸ“Š Analytics & streaks β€” focus-time KPIs, a last-7-days bar chart, per-tag and per-project breakdowns, a GitHub-style heatmap, and streak tracking.
  • 🌌 Living wallpapers & effects β€” CSS-mesh presets (Aurora / Dusk / Mist / Noir) or your own photo, with optional animated effects (Aurora glow, Rainfall, Snowfall, Starfield, Fireflies).
  • πŸͺŸ Live glass controls β€” Tint + Blur sliders frost every card over your wallpaper, in real time.
  • πŸ”” Notifications & tones β€” browser notifications and Web Audio completion tones, with Do-Not-Disturb during focus sessions.
  • πŸ” Your data, yours β€” everything is scoped to your account with row-level security; AI chats live in your own database and are never read or reused.
  • 🎨 Dark / Light / System themes and email + Google OAuth sign-in.

πŸ“Έ More screenshots

πŸ“Š Analytics

Screenshot placeholder β€” add docs/screenshots/analytics.png

Focus-time stat cards, a last-7-days gradient bar chart, by-project and by-tag breakdowns, and a contribution-style heatmap of your deep-work history.

πŸ€– Focus AI chat

Screenshot placeholder β€” add docs/screenshots/ai_chat.png

The Focus AI panel β€” branded glass that matches your tint/blur, with action cards for every task it creates or edits, saved conversation history, and the Focus AI watermark behind the chat.


πŸ› οΈ Development

Tech stack

Next.js 16 (App Router, Turbopack) Β· TypeScript Β· Tailwind v4 Β· Framer Motion Β· Zustand Β· TanStack Query Β· Supabase (Postgres + Auth + Storage) Β· Vercel AI SDK (OpenAI-compatible) Β· Spotify Web Playback SDK Β· lucide-react Β· Sonner Β· date-fns

Quick start (local)

Requirements: Node 20+, npm

# 1. Install dependencies
cd focusspace
npm install

# 2. Set up environment variables
node scripts/setup-env.mjs
# Enter Supabase URL, anon key, service role key, site URL (http://localhost:3000)

# 3. Apply database migrations (in order) via Supabase Dashboard β†’ SQL Editor
#    supabase/migrations/0001_init.sql … 0009_ai_and_project_view.sql

# 4. Start the dev server
npm run dev
# Open http://localhost:3000

Core environment variables

Variable Where to find it
NEXT_PUBLIC_SUPABASE_URL Supabase β†’ Settings β†’ API β†’ Project URL
NEXT_PUBLIC_SUPABASE_ANON_KEY Supabase β†’ Settings β†’ API β†’ anon/public key
SUPABASE_SERVICE_ROLE_KEY Supabase β†’ Settings β†’ API β†’ service_role key
NEXT_PUBLIC_SITE_URL Your deployed URL (or http://localhost:3000 for dev)

Focus AI environment variables (optional)

The assistant speaks the OpenAI-compatible protocol β€” point it at a LiteLLM proxy or any compatible endpoint. The feature stays hidden and the build succeeds with all of these unset. Users may also add their own key + model in Settings (encrypted at rest, never returned to the browser).

Variable Purpose
NEXT_PUBLIC_AI_ENABLED true to enable Focus AI globally (client-visible flag)
AI_BASE_URL OpenAI-compatible base URL (e.g. your LiteLLM proxy /v1)
AI_API_KEY Global gateway API key
AI_DEFAULT_MODEL Default model id (e.g. gemini-2.5-flash, gpt-4o-mini)
AI_ALLOWED_MODELS Comma-separated model allow-list for the picker
AI_FREE_MONTHLY_TOKENS Monthly token cap for global-key users (default 150000)
AI_MAX_STEPS Max tool-calling steps per turn (default 8)
AI_ENCRYPTION_KEY Secret used to encrypt users' own API keys at rest

Database migrations

Run in order via Supabase Dashboard SQL Editor (or supabase db push):

File Purpose
0001_init.sql Tables + RLS + indexes
0002_views_and_trigger.sql Analytics views + new-user bootstrap trigger
0003_storage.sql Wallpapers storage bucket + Storage RLS
0004_security_and_performance_fixes.sql RLS / performance hardening
0005_wallpaper_settings.sql Wallpaper blur/brightness settings
0006_subtasks_and_spotify_takeover.sql Subtasks table + Spotify takeover setting
0007_glass_controls.sql Glass tint/blur slider settings
0008_effects.sql Live-effect selection + per-effect settings
0009_ai_and_project_view.sql Focus AI (credentials/usage/chat) + synced Projects view preference

Deploy β€” Vercel

npm i -g vercel
vercel link
node scripts/export-supabase-env.mjs   # β†’ vercel-env.txt
# Paste values into Vercel β†’ Project β†’ Settings β†’ Environment Variables
vercel --prod

Add these OAuth redirect URLs in Supabase Auth β†’ URL Configuration (and Google Cloud Console):

https://focusspace.live/auth/callback
https://<your-project>.vercel.app/auth/callback

Deploy β€” Docker (self-host)

docker compose build \
  --build-arg NEXT_PUBLIC_SUPABASE_URL=... \
  --build-arg NEXT_PUBLIC_SUPABASE_ANON_KEY=... \
  --build-arg NEXT_PUBLIC_SITE_URL=https://your-domain.com
docker compose up -d

Keyboard shortcuts (Focus screen)

Key Action
Space Play / Pause
R Reset timer
S Skip session

Contributing

Found a bug or have an idea? Open an issue on GitHub, or email shahzadtechworld@gmail.com.


πŸ“„ Legal

FocusSpace is open source and your data stays yours β€” we never read or reuse it.

Releases

No releases published

Packages

 
 
 

Contributors