PickUp is a local-first productivity app that helps people return to unfinished work without losing context.
Whether the task is studying, cooking, planning, writing, project work, or everyday life admin, PickUp keeps the important parts of progress visible:
- what you were doing
- what changed
- which milestones mattered
- what to do next
With AI-assisted context recall and optional Notion sync, PickUp is built to feel less like a notes app and more like a reliable way to continue where you left off.
Most tools capture information, but they do not make resuming easy. PickUp is designed around a simple question:
What should someone see when they come back later and do not want to reconstruct everything from scratch?
PickUp answers that with:
- saved context history
- milestone tracking
- next-step guidance
- AI-generated resume help
- optional sync to a shared Notion workspace
PickUp works immediately without any account setup. Contexts are stored locally in the browser so a user can start capturing progress right away.
When sync is enabled, PickUp sends context updates to Notion. Local work can continue seamlessly, and existing contexts can be pushed to the connected workspace.
Users can ask PickUp to remind them where they stopped, summarize progress, and suggest the best next step based on saved notes, milestones, and current context state.
- Create contexts for any kind of ongoing work
- Save progress locally without sign-in
- Enable sync to send contexts to Notion
- Ask AI for a resume summary or next-step help
- Capture milestones automatically from progress
- Keep a pinned next step visible
- Search contexts by title, notes, summaries, or milestones
- Archive and restore contexts
- Export a context as plain text
- View daily recap links for synced Notion activity
- Use responsive mobile, tablet, and desktop layouts
pickup/
backend/
server.js
.env.example
frontend/
.env.example
src/
components/
pages/
services/
- React
- Vite
- Tailwind CSS
- Framer Motion
- React Router
- Node.js
- Express
- OpenRouter
- Notion API
Frontend:
cd frontend
npm installBackend:
cd backend
npm installCreate backend/.env from backend/.env.example:
PORT=5000
OPENROUTER_API_KEY=your_openrouter_key
FRONTEND_ORIGIN=http://localhost:5173
ALLOWED_ORIGINS=
NOTION_TOKEN=your_internal_notion_token
NOTION_CONTEXTS_DB=your_contexts_database_id
NOTION_MESSAGES_DB=your_messages_database_idCreate frontend/.env from frontend/.env.example only if you want to override the default backend URL:
VITE_API_BASE_URL=http://localhost:5000cd backend
npm startcd frontend
npm run devOpen:
http://localhost:5173
PORTOPENROUTER_API_KEYFRONTEND_ORIGINALLOWED_ORIGINSNOTION_TOKENNOTION_CONTEXTS_DBNOTION_MESSAGES_DB
VITE_API_BASE_URL
Important:
- Keep all secrets on the backend only.
- Never expose Notion or OpenRouter credentials in
VITE_*variables.
The project is prepared for a simple free-tier deployment setup:
- frontend on Vercel
- backend on Render
Included deployment files:
- Import the repository into Vercel.
- Set the root directory to
frontend. - Use the
Viteframework preset. - Set the build command to:
npm run build- Set the output directory to:
dist
- Add this environment variable:
VITE_API_BASE_URL=https://your-render-service.onrender.com- Create a new web service from the repository, or use
render.yaml. - Set the root directory to
backendif configuring manually. - Set the build command to:
npm install- Set the start command to:
npm start- Add these environment variables:
NODE_ENV=production
FRONTEND_ORIGIN=https://your-vercel-project.vercel.app
ALLOWED_ORIGINS=
OPENROUTER_API_KEY=your_openrouter_key
NOTION_TOKEN=your_notion_token
NOTION_CONTEXTS_DB=your_contexts_database_id
NOTION_MESSAGES_DB=your_messages_database_idIf you want to allow preview domains or an additional custom domain:
ALLOWED_ORIGINS=https://your-preview-domain.vercel.app,https://your-custom-domain.com- Render free services can sleep after inactivity, so the first backend request may take a few seconds.
- Because the app uses free-tier hosting and free AI models, the first AI response may occasionally take a little longer.
- Keep real secrets only in Render environment variables.
- Vercel should only receive
VITE_API_BASE_URL.
Before pushing or deploying:
- Keep
backend/.envlocal only. - Commit only
.env.examplefiles, never real.envfiles. - Confirm your frontend env contains only
VITE_API_BASE_URL. - Store all real secrets in Render, not in the repository.
- Rotate any key that may have been shared previously.
- Home: product positioning and entry point
- App: context dashboard, search, archive, and sync actions
- Context: notes, AI help, milestones, next-step guidance, and export
- About: product intent and design direction
- Contact: feedback captured through Notion
- Local-first context saving
- Optional Notion sync
- AI-powered resume assistance
- Milestone tracking
- Pinned next-step flow
- Search and archive support
- Context export
- Responsive mobile and tablet UI
- Product-style onboarding and feedback states
Frontend production build passes with:
cd frontend
npm run build- Per-user workspace selection
- Richer recap and summary views
- Smarter milestone grouping
- More advanced sync history
- Deeper collaboration features