An AI-powered product management workspace. Write PRDs, plan roadmaps, prioritise features, and synthesise research — all in one place, with an AI co-pilot that writes directly into your documents.
AI Workflows
- PRD — generates complete product requirements documents with problem statement, metrics, user stories, scope, and open questions
- User Stories — Gherkin acceptance criteria, story points, edge cases, and definition of done
- Roadmap — Now / Next / Later planning with sequencing rationale and dependency mapping
- Prioritization — RICE scoring, MoSCoW classification, and trade-off analysis
- Research — synthesises interview notes and feedback into themes, quotes, and product opportunities
- Data — funnel analysis, anomaly detection, hypothesis generation, and experiment design
- Free Chat — general PM co-pilot with no document mode
Editor
- Rich text editing powered by Tiptap
- AI writes directly into the open document, preserving existing content
- Diff view — see exactly which lines were added or removed after each AI response
- Export to Markdown or plain text (copy or download)
File Explorer
- Cursor-style folder tree in the left sidebar
- Create, rename, and delete folders and documents inline
- Documents are automatically named based on their parent folder
- All changes persist to a local SQLite database
Command Palette
Cmd+K— open workflows or create documents from anywhereCmd+N— new note in the current folder?— keyboard shortcuts reference
| Layer | Technology |
|---|---|
| Framework | Next.js 14 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS |
| UI Components | shadcn/ui |
| Rich Text | Tiptap |
| State | Zustand |
| Database | SQLite via Prisma 5 |
| AI | OpenAI GPT-4o (streaming) |
| Layout | react-resizable-panels |
git clone https://github.com/dscuietpu/pixel-nomads.git
cd pixel-nomads
npm installcp .env.example .env.localEdit .env.local and add your keys:
OPENAI_API_KEY=sk-...your-key-here...
DATABASE_URL="file:./prisma/dev.db"# Apply migrations and generate the Prisma client
npx prisma migrate dev
# Seed with demo data (documents, features, research insights)
npx prisma db seednpm run devOpen http://localhost:3000.
├── app/
│ ├── api/
│ │ ├── ai/route.ts # GPT-4o streaming endpoint
│ │ └── db/ # REST routes for each entity
│ │ ├── documents/
│ │ ├── features/
│ │ ├── filenodes/
│ │ ├── insights/
│ │ └── messages/
│ ├── layout.tsx
│ └── page.tsx
│
├── components/
│ ├── AppShell.tsx # Three-panel layout shell
│ ├── editor/
│ │ ├── EditorPanel.tsx # Title bar, toolbar, export
│ │ └── TiptapEditor.tsx # Rich text editor instance
│ ├── sidebar/
│ │ ├── LeftSidebar.tsx # File explorer + feature counts
│ │ ├── FileExplorer.tsx # Folder tree with CRUD
│ │ ├── AIChatPanel.tsx # AI workflows + chat
│ │ ├── RightPanel.tsx # Tab container for right panel
│ │ ├── ResearchPanel.tsx # Research insights view
│ │ └── DataPanel.tsx # Data input + analysis
│ ├── roadmap/RoadmapBoard.tsx # Kanban-style roadmap view
│ ├── prioritization/ # RICE + MoSCoW panel
│ ├── modals/
│ │ ├── CommandPalette.tsx # Cmd+K palette
│ │ └── KeyboardShortcuts.tsx
│ └── ui/ # shadcn/ui primitives
│
├── lib/
│ ├── types.ts # All TypeScript interfaces
│ ├── store.ts # Zustand store + DB sync
│ ├── prompts.ts # System prompts per workflow
│ └── prisma.ts # Prisma client singleton
│
├── prisma/
│ ├── schema.prisma
│ ├── seed.ts # Demo data
│ └── migrations/
│
└── data/
└── mock.ts # Research insight mock data
The app uses SQLite via Prisma. The database file lives at prisma/dev.db and is excluded from version control.
Available scripts:
# Push schema changes to the DB (no migration file)
npx prisma db push
# Create a migration file and apply it
npx prisma migrate dev --name <migration-name>
# Reset the DB and re-apply all migrations + seed
npm run db:reset
# Open Prisma Studio (visual DB browser)
npx prisma studio- User selects a workflow tab (PRD, Stories, Roadmap, etc.) and types a prompt
- The frontend sends the prompt, conversation history, and optional document context to
/api/ai - The API constructs a system prompt from
lib/prompts.tsand streams the response from GPT-4o - For document-writing workflows, the response is converted from Markdown to Tiptap HTML and applied to the active document
- A compact action card appears in chat showing which document was updated, with a Diff toggle to see exactly what changed
For analytical workflows (Prioritization, Data, Free Chat), responses are rendered as Markdown directly in the chat — no document is created or modified.
| Shortcut | Action |
|---|---|
Cmd+K |
Open command palette |
Cmd+N |
New note in current folder |
Cmd+Enter |
Send AI message |
Cmd+/ |
Cycle right panel tabs |
? |
Show all shortcuts |
| Variable | Required | Description |
|---|---|---|
OPENAI_API_KEY |
Yes | Your OpenAI API key |
DATABASE_URL |
Yes | Prisma database connection string |
Never commit
.envor.env.local. They are excluded by.gitignore.
The app is designed for local use with a SQLite database. For production deployment:
- Replace SQLite with a hosted database (PostgreSQL on Neon, Supabase, or PlanetScale)
- Update
DATABASE_URLin your hosting provider's environment variables - Update
prisma/schema.prismato usepostgresqlas the provider - Deploy to Vercel, Railway, or any Node.js host
# Build for production
npm run build
npm start