Atlas is a local-first second brain built with Next.js App Router, TypeScript, Tailwind CSS, and shadcn/ui primitives. It keeps Areas, Tasks (with recurrence), Habits, Notes, an Archive, and a persistent settings store in one minimal workspace that runs entirely in the browser using Zustand + localStorage persistence.
Note: This was a personal experiment and isn’t actively maintained. Feel free to fork, remix, or borrow ideas.
- Next.js 14 (App Router) + React 18 + TypeScript
- Tailwind CSS with custom tokens + shadcn/ui components
- Zustand stores with a swap-ready localStorage adapter (future IndexedDB)
- Radix UI primitives, Lucide Icons, and date-fns helpers
- Dashboard with quick capture, a first-run welcome guide, daily agenda, time-aware task snapshot (with “Next up”), habit streak highlights, daily scratchpad, and recent notes rail.
- Tasks: Kanban statuses (To Do / In Progress / Done), recurrence (daily/weekday/weekly), optional start/end times + durations, priority levels, local reminders, and duplication controls.
- Habits: daily/weekly/custom cadences, a weekly completion micro-chart, seven-day logging timeline, quick log buttons for the last few days, and streak tracking.
- Notes: freeform editor with metadata (related area/task, last edited timestamp), inline tags, pinning, and automatic daily scratchpad storage.
- Areas: custom color accents or emoji icons plus detail pages summarizing tasks by status, habit streaks, and related notes.
- Dark mode: light/dark palette toggle persisted via the settings store using a
data-themeattribute. - AI assistant (optional): connect an OpenAI API key to draft tasks from natural-language briefs.
- Archive: retrieve archived tasks, habits, and notes at any time.
Everything is stored locally in the browser. No accounts, sync, or external services.
npm install
npm run devVisit http://localhost:3000 to start using the workspace. The UI and data live entirely on-device; clearing browser storage will reset the workspace.
app/- App Router pages for dashboard and entity viewscomponents/- Layout shell, dashboard widgets, and shadcn-based primitivesstores/- Zustand stores for areas, tasks, habits, notes, and settingslib/- Utilities for persistence, recurrence calculations, theming helperstypes/- Domain models shared across stores and components
npm run dev- start the Next.js dev servernpm run build- create a production buildnpm run start- run the production servernpm run lint- validate with ESLintnpm run format- format with Prettier + Tailwind plugin
-
Create an OpenAI API key and add it to
.env.local:OPENAI_API_KEY=sk-xxxx -
Restart
npm run dev. -
Enable the assistant in the Tasks view, write a brief, and Atlas will draft suggestions that you can import as real tasks. The rest of the workspace remains local-first.
Atlas is a standard Next.js project, so you can wrap it as a desktop executable with tools like:
- Tauri (preferred for local-first apps): run
npm run build, then point a Tauri shell at the.nextoutput. Tauri bundles a lightweight Rust host with a WebView and offers installers for Windows/macOS/Linux. - Electron: serve the production build via
next startand load it in an Electron window. Useelectron-builderorelectron-forgeto create installers.
Both approaches let you keep localStorage/Zustand persistence. For best results, expose only the built app and disable network permissions if you want an offline-first bundle (excluding the optional AI route).
- This project is an experiment and not actively maintained, but feel free to fork or build on it.
- Run
node scripts/seed.ts. This writes a.seedfile with JSON snapshots for every persisted store. - Start the dev server (
npm run dev), open DevTools → Console, and paste each value vialocalStorage.setItem("second-brain-areas", "<value from .seed>"),second-brain-tasks, etc. - Refresh the page. The fake areas, tasks, habits, and notes load instantly for demo screenshots.
You can edit scripts/seed.ts if you want different demo content.
