Skip to content
luidgi-devPublic

About

Strive, an AI-first PWA habit tracker built around flexible weekly targets instead of daily streaks. Log rituals via natural language, powered by Next.js, Supabase, and Gemini.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

610 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Strive. Find your rhythm.

Strive

CI License

Live app  ·  Technical deep dive  ·  Documentation

Strive (live at striveapp.cc) is a minimalist, AI-first ritual tracker PWA. It replaces the anxiety of daily streaks with a flexible system grounded in weekly and monthly consistency: momentum that decays slowly, never resets to zero, and treats rest days as part of the practice.

Try it without signing up. The landing page has a Try the demo button that opens a populated account, resets nightly. No credentials needed.

Status: live, feature complete for the first release. Built solo. Maintained rather than actively expanded.

Rhythm: today's rituals at a glance      The Arc: twelve weeks of consistency      My Strive: logging a ritual in plain language

Rhythm, today at a glance  ·  The Arc, twelve weeks of consistency  ·  My Strive, logging in plain language

What is Strive

  • Flexible consistency instead of binary success/failure.
  • Zero-friction logging, including conversational flows powered by AI.
  • Quiet luxury UI: minimal, fast, clear, dark-by-default.

The full product specification lives in docs/PRODUCT_SPEC.md. Canonical terminology and tone are in docs/UX_WRITING.md.

Tech stack

  • Next.js 16 (App Router, Server Components by default)
  • TypeScript 5, React 19
  • Supabase (PostgreSQL + Auth + RLS) via @supabase/ssr
  • next-intl for routing-aware i18n (en, fr)
  • Tailwind CSS v4 + shadcn/Base UI primitives
  • next-themes for light/dark theming
  • Vercel AI SDK (ai + @ai-sdk/google) with Google Gemini (gemini-2.5-flash) for the app's AI features
  • Vitest for unit tests (pure logic: dates, momentum, scheduling)

Repository structure

Path Role Reference
app/ Next.js App Router (locale-aware routes) app/README.md
components/ Reusable React components components/README.md
lib/ Supabase clients and shared utilities lib/README.md
messages/ i18n translations (en.json, fr.json) n/a
data/ DB schema, seeds, triggers, views, migration runner data/README.md
docs/ Architecture, design system, UX writing, product spec docs/README.md
design/ Design workspace (wireframes, mockups, research) design/README.md
.agents/ Reusable AI skill packs .agents/README.md
.github/ CI workflows and AI review prompts .github/WORKFLOWS.md

Root files like proxy.ts, i18n.ts, next.config.ts, tsconfig.json are build/runtime critical and are documented in docs/ARCHITECTURE.md.

Quick start

Prerequisites: Node.js 24+ (see .nvmrc) and npm. Step 3 also needs Python 3 with psycopg2-binary and python-dotenv (pip install psycopg2-binary python-dotenv), since the migration runner is a Python script.

  1. Create a .env.local at the repo root with:
 NEXT_PUBLIC_SUPABASE_URL=...
 NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=...
 DATABASE_URL=postgresql://postgres:<password>@<host>:5432/postgres  # used by the migration runner in step 3
 GOOGLE_GENERATIVE_AI_API_KEY=...   # AI features (Gemini); optional STRIVE_AI_MODEL overrides the model
 SUPABASE_SERVICE_ROLE_KEY=...      # server-only; the Insights cron generates under the service role
 CRON_SECRET=...                    # shared secret authorizing the Insights cron route
 NEXT_PUBLIC_VAPID_PUBLIC_KEY=...   # Web Push: public VAPID key (sent to the browser)
 VAPID_PRIVATE_KEY=...              # Web Push: private VAPID key (server-only, never exposed)
 VAPID_SUBJECT=mailto:you@example.com  # Web Push: VAPID contact (mailto: or https:)

Generate the VAPID pair once with npx web-push generate-vapid-keys. See design/push-notifications.md for the notification rules and stack. 2. Install dependencies:

 npm install
  1. Set up the database. The app reads from Supabase on first load, so a fresh, empty project will error out. Apply the schema, functions, triggers, and seeds with the migration runner. Full steps, prerequisites and DATABASE_URL details are in data/README.md:
 python data/migrate.py
  1. Run the dev server:
 npm run dev
  1. Open http://localhost:3000.

Run npm test to execute the unit suite, npm run lint to lint, and npm run build for a production build.

For database setup (migrations, seeds, RLS), see data/README.md. For Supabase client usage, see lib/README.md.

Testing PWA features locally. Service workers and Web Push do not behave reliably over http://localhost:3000. Run a production build (npm run build && npm run start) or expose the dev server through an HTTPS tunnel (e.g. ngrok, localtunnel) to exercise the install prompt and notifications.

Internationalization

Strive ships in English and French, served via next-intl and locale-prefixed routes (/en/..., /fr/...). All user-facing strings live in messages/en.json and messages/fr.json, never hardcoded in components. Locale is resolved by i18n.ts and the runtime middleware in proxy.ts.

Theming

Light and dark modes via next-themes. Color tokens are defined as CSS custom properties in app/globals.css and the canonical visual contract is in docs/DESIGN_SYSTEM.md. Never hardcode hex/rgb values. Always reference Tailwind tokens.

CI & automation

Two GitHub Actions workflows guard the repo:

  • pr-review.yml: AI-assisted review on every pull request, checking code semantics, terminology, and architectural fit.
  • project-audit.yml: periodic project-wide audit for documentation drift and architectural health.

Both workflows consume prompts from .github/prompts/. See .github/WORKFLOWS.md for the full setup.

Testing

Unit tests run on Vitest and are co-located with the code they cover (*.test.ts), focused on the pure, high-value logic that drives the app: date math, momentum derivation, and the Rhythm "what shows today" selection.

npm test            # run the suite once
npm run test:watch  # watch mode during development

Coverage is intentionally scoped to pure logic for now; component and end-to-end tests are planned and would live under a top-level tests/ folder. See lib/README.md for the current test map.

AI agent guidelines

This repo is designed to be coded with AI agents. Three files keep agents aligned:

Reusable skill packs (e.g. Supabase Postgres best practices) live under .agents/skills/.

Documentation

The full documentation index is docs/README.md. Highlights:

Contributing

See .github/CONTRIBUTING.md. In short: branch off dev, PRs target dev, keep TypeScript strict, and use design tokens + Strive terminology. Please also follow the Code of Conduct; report vulnerabilities per the Security Policy.

Links

License

PolyForm Noncommercial 1.0.0. © 2026 Luidgi. The source is available to read and learn from; commercial use is not permitted.

About

Strive, an AI-first PWA habit tracker built around flexible weekly targets instead of daily streaks. Log rituals via natural language, powered by Next.js, Supabase, and Gemini.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages