← Back to work
Project 03 · Full-stack · Next.js · Drizzle

Atelier, a productivity dashboard.

A productivity dashboard for small teams. Tasks, notes, analytics, and an interface that doesn't yell.

Open Atelier View source Public demo: every visitor lands as a shared 'Demo User' on a pre-seeded workspace. Edit tasks, write notes, invite teammates — nothing is gated.
Role
Engineer · Designer
Year
2024 → 2026
Stack
Next.js · Drizzle · Turso
Status
Live demo
Atelier / Plate I — Public demo
Atelier / Plate I — Public demo2024 → 2026
Live demo

A no-auth public build — click anywhere.

Open in a new tab
Embedded demo loading

If this stays blank, your browser blocked the embed.

Open in a new tab

Public demo: every visitor lands as a shared 'Demo User' on a pre-seeded workspace. Edit tasks, write notes, invite teammates — nothing is gated.

Philosophy

Productivity tools mostly perform productivity. This one tries to disappear.

Atelier started as a question: what does a dashboard look like if it's designed to be closed? The features earn their place by removing decisions, not adding panels — tasks have priority and status; notes auto-save; analytics shows last-30-day completion as a sparkline, not a billboard.

Beneath the calm surface is a real full-stack app — Next.js 14 App Router, Drizzle ORM over Turso (libSQL), every server action gated by a workspace-membership check that's the equivalent of Postgres RLS, just enforced in app code. Engineering rigor in the service of a quieter UI.

Feature breakdown

What it actually does.

01

Tasks with teeth

Editable data table with status, priority, assignee, and due dates. Filterable. Keyboard-friendly. Editorial typography that respects density without crowding.

02

Auto-saving notes

Title + body editor that persists on every keystroke via server actions — no save button, no anxiety. Notes are workspace-scoped and listed by recency.

03

Team without ceremony

Member list and invite-by-email flow that generates a copyable link. Invites resolve to workspace memberships at first hit.

04

Analytics that mean something

Last-30-day metrics, a completion sparkline, and a top-contributors block. The page answers two questions and stops.

Under the hood

The system, in four moves.

  1. Step 01

    Schema

    Drizzle ORM with libSQL/SQLite. Source of truth lives in src/lib/db/schema.ts; auth tables exist for future Auth.js wiring but are unused in the public demo.

  2. Step 02

    Authorization

    Every server action calls requireMembership(workspaceId) before mutating. The access model is part of the data model, not bolted on.

  3. Step 03

    No-auth demo seed

    ensureDemoSetup() resolves every visitor to demo@atelier.local on first request and seeds a few tasks and notes — so the dashboard is never empty on arrival.

  4. Step 04

    Deploy

    Vercel + Turso. Schema pushed via drizzle-kit. Local dev falls back to a SQLite file if Turso env vars are blank.

Inspiration
Linear
Notion
Arc
Stripe

"Productivity software shouldn't feel like productivity software. The best dashboard is the one you close at 5pm."

Project notes, Atelier