Brain pulls together every calendar and email inbox in one place, then uses AI to plan your day, surface what matters, and bury what doesn't. A second module handles health: sports, nutrition, and recovery, so the same operator who runs the businesses also has a single view of the body running them.
What it does
- Unified calendar and email across personal and business accounts
- AI-organized daily agenda with intent-aware prioritisation
- Health module: training, nutrition logging, recovery tracking
- Built for one user, designed to scale to a small team

Joona runs Papu Studio plus three other operating businesses solo: Easy Host (sixty short-term rental listings across nine Finnish cities), Caravan HQ, and Pisteo.io. ChatGPT and Claude got him about ninety percent of the way as a thinking partner, but every session started cold: no idea what was on his calendar, who he owed a reply, how his last training session went, or what his Cowork notes said about a customer from six months back. He built Brain to close that gap. It reads his inbox, calendar, training data, and notes directly, holds context across sessions, and acts on his behalf only with explicit approval. The same agent becomes a strength coach on body threads, a guarded inbox triager on replies, and a quarterly-themes-aware planner anywhere else, switched by an editable skill registry he can change without a deploy.
Why it was developed
For a year the pattern was the same. Open Claude in one tab, paste in last night's Oura, paste in the last three session notes, paste in the current programme, then ask whether to lift. Open another tab for an Easy Host customer reply, paste in the last three emails, paste in the relevant Cowork doc, then ask. Every session, from zero context. The thinking was good. The setup cost was a tax on every decision.
The trigger was that the ratio kept getting worse. Each useful answer started costing more setup than the answer itself was worth. Do that dozens of times a day, across four operating businesses, and the time math stops working.
The fix wasn't a better prompt. It was a system that already knew the state. Brain is that system. It watches the data sources, holds context across sessions, and lets the conversation start from where the day actually is, not from a blank assistant on a fresh tab.
What it solves
Ordered roughly the way the day unfolds.
- Cold start
- Before
- Open three tabs (Gmail, Calendar, Oura). Skim each for what to care about today.
- After
- /today renders a paragraph-shaped briefing already aware of last night's readiness, this morning's calendar, and the top inbox items, before the kettle boils.
- Should I lift today?
- Before
- Paste Oura readiness, paste last session feedback, paste current programme, then ask Claude. Every morning.
- After
- Ask the body thread directly. The trainer skill already has HRV, readiness, the 4-week programme, and Wednesday's note that said the squat felt grindy.
- Real reply vs noise
- Before
- Skim 80+ Gmail items across two accounts, decide what's actually a reply candidate.
- After
- A 5-tier classifier pre-sorts the morning's inbox into reply, action, receipt, read, and background. The 80 collapse to maybe 4 reply candidates.
- Drafting in voice
- Before
- Read the thread, type a draft, second-guess the tone, rewrite.
- After
- AI-draft button on each reply card produces a Joona-voiced draft using the voice principles the skill registry holds. Edit, send.
- Follow-ups that fall through
- Before
- Mental note to nudge them next week. Forget. Or write it somewhere that gets lost.
- After
- Tick 'remind me in 5 days' on send. If they reply, the snooze cancels itself. If not, the cron sends the polite nudge automatically, capped at 5 per run with a kill switch.
- Who is this person again?
- Before
- Search Gmail for their name. Read three threads. Try to remember the context.
- After
- People page shows last contact, business and personal tags, auto-derived from email and calendar history. Open an agent thread and the session prompt already flags who's overdue a check-in.
- Will I make the meeting?
- Before
- Add the meeting, estimate drive time in your head, hope.
- After
- Location autocompletes via Google Maps. Travel buffer auto-creates using the home address and EV-aware drive time. The buffer renders before the meeting without overlap.
- End-of-day recap
- Before
- Try to remember what happened. Maybe scroll Gmail backwards.
- After
- Yesterday-recap block on /today the next morning summarises what shipped, what's still open, and what feedback came in.
What the goals were
Six things to make true. Every other decision in the build flowed from one of these.
- Cut context-assembly time per question to near zeroBrain reads inbox, calendar, Oura, training history, and Cowork notes itself. The agent boots with all of it in the system prompt, with route-aware filtering so a body thread doesn't get the inbox count and an inbox thread doesn't get HRV.
- Never let an autonomous write happen without explicit approvalEvery write tool (send email, accept invite, create event, change RSVP) queues a pending agent_action. The user approves in-app before it fires. The snooze cron has a per-run cap, a per-user kill switch, and a self-send guard.
- Make agent behaviour editable without a deploySkill registry: trainer voice, briefing walkthrough rules, and any future role live as DB rows. Edit the body markdown, save, the next thread picks it up.
- Turn one good conversation into a reusable skillSave-as-skill button on every assistant message. Claude extracts the pattern, Joona tweaks the draft, saves into the skill table. The next matching thread loads it automatically.
- Bring routine decisions to him, not the other way aroundMorning briefing pre-renders before sunrise. A PWA push notification lands at 05:00 UTC with the day's top items. Snooze reminders fire on the same cron when threads have gone cold.
- Work on his phone the same as his desktopPWA install, web push, and an email-alias system so both his Google identities resolve to the same Brain user. Nothing about which device he's on changes what he sees.
How we reached the goals
The build pattern was the one Papu uses on every project: short loops, ship rough then refine, the customer in the room. Joona was both the customer and the developer here, which removed one of the bottlenecks in a normal build. When a gap showed up, like buffer rendering off, mobile login broken, or RSVP being read-only, the fix landed the same session.
Anthropic's Sonnet 4.5 did the heavy typing, with a senior software operator steering. That ratio is the working model. The model is fast at scaffolding, refactors, and drafting. The human stays on the architecture decisions, the safety gates, and the calls when something fails at 11pm. Brain itself was built that way, with daily deploys to production from week one.
For Papu's other clients the same shape applies. The customer is in the call. Drafts ship into production behind feature flags the same day. Feedback comes from actual use, not slide reviews. By the end of an engagement the customer can read the code and own the repository. Brain's case is an extreme version of that: the customer wrote half of it.
Tech we used
Named so any SME owner can search and verify.
- Next.js 16 + React 19Frontend + server actions
App router for clean route-scoped state. Server actions keep mutations close to the database without a separate API layer.
- PostgreSQL + Drizzle ORMData layer
Drizzle's type-safe schema and migrations let the model and the human read the same source of truth. Postgres handles arrays, jsonb, and time ranges well, which is where most of the body and calendar data lives.
- RailwayHosting + Postgres + cron
Single dashboard for the web service, the database, the nightly cron, and env vars. One vendor for what would otherwise need three.
- Better AuthSign-in
Drizzle adapter, Google social provider, account linking, and database hooks for sign-up rules. Simpler than NextAuth for this shape.
- Anthropic Claude Sonnet 4.5Agent reasoning
Tool-use protocol matches the explicit-approval pattern. Prompt caching keeps the cost of long system prompts low. Strong instruction-following so the safety gates stay intact.
- Google Calendar + Gmail APIsCalendar + inbox
Direct read and write across multiple connected accounts. Single source of truth for events and threads, no resync logic to maintain.
- Google Maps PlatformLocations + drive time
Geocoding for the home address, Directions for traffic-aware travel buffers, Places Text Search for location autocomplete on the event modal.
- Oura APISleep + readiness
HRV, readiness score, and sleep hours read on demand. The trainer skill gates progression on today's live numbers, not a stale weekly average.
- Health Auto Export (iOS) + Apple HealthWorkouts + biometrics
Push from the phone via a shared secret. No App Store dependency, no native SDK to maintain.
- Web Push + VAPID + Service WorkerPWA notifications
Morning briefing push at 05:00 UTC. Installable as an app on iOS and Android with the same code path as the web.
- PostHog (EU)Product analytics
Self-hosted EU instance, gated by env so local dev stays clean. Useful for spotting which surfaces actually get used vs which are noise.
- SentryError tracking
Source-map upload via the Next.js plugin. Optional and env-gated so dev stays quiet.
The process
What working with Papu Studio looks like, from first message to the day you own the code.
- Discovery
A 30 to 90 minute first call. We get clear on the actual day, the actual problem, the actual tools you already use. No upfront scoping document. We propose the smallest end-to-end build that closes the most painful gap, and if we can't see one, we say so.
- Scoped MVP
First production deploy lands inside week one. The shape is real, not a mock: connected to your real data, behind your real auth, ready to do real work. From this point every change ships behind a feature flag and you see it the same day.
- Continuous delivery
Short loops, deploys most days. You use the build for real work between sessions, and the feedback comes from that use, not from slides. The build evolves toward what your day actually needs, not what we assumed at the start.
- Ownership transfer
The code is yours from day one. Repo, hosting, env vars, integrations, all in your name. If you want us to keep maintaining, we do. If you want to take it in-house or to another team, the handoff is a README and a Slack message, not a six-month transition project.
Running multiple businesses solo? You can buy this same system.
If you operate multiple businesses out of one calendar, the shape of what you need is close enough to what Brain does that most of the build is a re-skin. Your Gmail, your calendar, your CRM, your recovery or health data, your own notes. Connect them once, write the skill prompts that capture how you actually work, ship it.
A similar build for another solo operator runs roughly half the standard Papu tier because the architecture, the safety gates, and the deployment shape are already in place. What remains is the operator-specific work: naming the routes, writing the skills, wiring the integrations that aren't already in the catalogue. If you want to see Brain running in production before deciding, that's a 30-minute call.
Demanding
€5,000 – €10,000A real internal product. Multi-user, multi-feature, fits the way your team actually works.
What this tier includes →Want one like this for your own operations?
The hard part was figuring out the shape: which integrations to pull in, where the approval gates sit, how to route context per task. That's done. A similar build for another solo operator runs roughly half the standard tier because the architecture and the safety patterns are already in place.
Start a project