Vision
What Atlas Portal is for. Read this before proposing what to build next — the register says what is committed, this says what it is all in service of.
The north star
Not a toolbox. A client record that does work.
The failure mode to avoid is a portal that is ten disconnected tools sharing a login. What Alex described is the opposite: open a client, see how they are doing, see what worked and what did not, and press a button that produces the next thing — informed by everything already known about that client.
So: the client record is the spine. Every feature hangs off it or it does not belong here. A feature that cannot answer "which client, and what does this know about them?" is a tool, not part of the system.
The organising surface: client success
One page per client, and it is the product:
┌─ Inspire ID Group ───────────────────────────────────────────┐
│ Performance what ran, what worked, what fatigued │
│ Knowledge verified facts, approved angles, conflicts │
│ Roadmap goals, deliverables, what is due │
│ Actions [generate proposal] [ad report] [new angle] │
│ Changelog what happened, decided, delivered │
└───────────────────────────────────────────────────────────────┘
The changelog matters more than it sounds: it is the second brain. An agency's real failure is nobody remembering what was decided three months ago, and every downstream tool inherits that amnesia.
What compounds, and what is merely work
The list of wants is roughly twenty products. Most will never be built, and that is fine — the job is picking the few where building one makes the next cheaper.
Compounding — build these:
| Why it compounds | |
|---|---|
| Client record + knowledge base | Everything reads it. Built. |
| Approved angles + guardrail | Every creative artefact traces here. Built. |
| Performance ingest | Unlocks six other features at once. See below. |
| Work model (tasks, assignment, status) | Unlocks PM, SOP capture, academy, workload views |
| Orchestrator | Only earns its cost once several pipelines exist to route between |
| Counterpart layer | Every loop above feeds it: taste, provenance, skills, Brain. See below |
Not compounding — buy, integrate, or defer:
| Want | Call |
|---|---|
| Accounting | Xero. Integrate read-only later for margin views. Never rebuild. |
| Payroll | Buy. Singapore CPF/IR8A compliance is a permanent tax on building it. See decisions.md. |
| Leave and claims | Bundled with payroll tools. Only build if one-place matters more than not owning it. |
| Calendar | Google Calendar API. Never build a calendar. |
| Invoicing | Xero. Reminders and tracking can be ours since they touch client state. |
| Video analysis, b-roll, clip cutting | Higgsfield and the Premiere MCP already do this. Orchestrate, do not reimplement. |
| Contracting | Templates plus e-sign SaaS. |
Performance ingest is the keystone
Half the list is impossible without it: "what worked", "do we need new creatives", client dashboards, the agency dashboard, creative proposals informed by results, angle fatigue.
Everything built so far produces creative. Nothing yet learns from it. Until performance data flows back, the system is a very careful one-way pipe.
Two notes:
- Backlog creatives should be processed once, slowly, cheaply into the knowledge base rather than analysed on every request. Pre-process, then serve instantly. Same principle as buying a scene once.
agency-monitoralready exists and already watches ad accounts. Absorb or integrate it rather than building a second thing that reads Meta.
Replacing ClickUp
The differentiator is not better task management — ClickUp is fine at that. It is that tasks are generated by the pipeline rather than typed by a human: brief lands, ideation runs, scripts are drafted, tasks appear assigned to the right people with the client's knowledge base attached.
That only works if each stage is genuinely good. A half-decent scripting stage produces tasks nobody trusts, and then the team goes back to ClickUp. So: do not replace ClickUp until the pipelines feeding it are good enough that generated work beats typed work.
Scripting in particular is not one skill file. It needs several agents — hook, structure, proof selection, voice — with a critic, because the nuance is where the quality lives.
Where agents go, and where they do not
The standing rule from docs/rules/cost.md: agents where volume is low and judgment is high; code where volume is high and the path is fixed.
Applied to this list:
- Code / API: rendering, performance ingest, reports, assignment, calendar, invoicing, dashboards
- Agents: ideation, scripting, strategy, reconciliation, proposals, storyboarding, orchestration
- MCP: anything a vendor already does well — generation, video analysis, clip cutting
The orchestrator picks *which* agents run and in what order. It does not do the work, and it never sits in a hot path.
Scalability: media is the thing that kills this
An agency portal dies on file size, not on request volume.
Rules, to be honoured from the first upload:
- Never proxy media through the app. Direct-to-storage uploads with presigned URLs, direct downloads from the CDN. A Node process streaming a 4GB rush is a dead Node process.
- Never store media in Postgres. Rows point at object storage. Always.
- Derivatives are content-addressed and cached. A crop is computed once, keyed by hash.
- Video never touches the web dyno. Transcoding and analysis are jobs, not requests.
- Egress is a cost line. R2 chosen for zero egress because creatives get downloaded constantly.
- Thumbnails, not originals, in every list view. The obvious mistake is the expensive one.
Atlas Brain
An advisory layer over everything the portal knows. Two modes, and the difference is a data boundary, not a UI toggle.
Owner mode — Alex and Jun Kai
Strategic questions across the whole business: *"what is the biggest bottleneck right now?"*
It must answer across every dimension, not just P&L. A bottleneck is rarely financial — it shows up as one of:
| Dimension | Signal it would read |
|---|---|
| Delivery capacity | Who is overloaded, what is late, where work queues |
| Client profitability | Hours consumed against retainer value, per client |
| Creative performance | What is working, what has fatigued, what never got tested |
| Knowledge health | Unresolved conflicts, coverage gaps, stale claims |
| Approval flow | Where work waits on a human — often the founders |
| Pipeline | New business against churn |
| Cash | Xero, read-only |
Employee mode — by role
An editor asks *"what should I work on"* and gets their queue with the client context attached. They do not see margins, salaries, or another client's profitability. This maps onto the roles already in the schema — admin, strategist, operator — and is enforced by the same RLS, not by prompt instructions asking the model to be discreet.
What makes it useful rather than decorative
It names the bottleneck and cites the evidence. "Consider reviewing your processes" is worse than silence. The output should be closer to: *"Scripting. Eleven deliverables are waiting on scripts, average age nine days, while generation sits idle. The constraint is one person's approval queue."*
Every claim traces to data. Same discipline as the knowledge base: if it cannot point at the rows, it does not assert it.
It must be willing to say the bottleneck is you. The most common real answer in a founder-led agency is that work waits on founder approval. An advisor that will not say that — because it is uncomfortable — is worthless, and this is a property to design for deliberately rather than hope for.
It says what to do next, and what it would need to be more certain.
Why this is late in the sequence, not early
Atlas Brain can only be as good as what it can see. Today the portal knows clients, knowledge and creatives — no performance, no utilisation, no finance. It could currently answer almost nothing worth asking.
It is the payoff for putting everything in one place, not a parallel build. Attempting it early produces a confident advisor working from a third of the picture, which is worse than none — it would be believed.
The counterpart layer
Every employee gets an AI counterpart — their second brain, inside the portal. Claude, but theirs: it holds their context, routes their work, learns from how they do things, and stands in when they are out. Alex's framing: a big lever, added to the vision 20 Aug 2026.
What it is
- A personal front door. Each person talks to *their* counterpart instead of a generic assistant. It knows their clients, their open work, their habits, their standards.
- A router, not a doer. The counterpart decides where a task belongs — a portal pipeline, a Claude Code session, a plain conversation — and dispatches. Orchestration stays deterministic; the counterpart is the judgment at the front, not a hidden pipeline.
- State lives in the portal. Context packs in the database, personality and method in versioned markdown files — the same shape as
skills/, one directory per person, hash-versioned so "which version of me answered that" always has an answer. - Co-built. The person edits their counterpart's files directly (how I write, what I check first, what I never do), and the counterpart also learns from observed actions — approvals, edits, rejections — which the system already records with provenance on every artefact.
- Stand-in when OOO. Ping a person's counterpart when they are away. It answers from their context with the Atlas Brain discipline: cite what it knows, say plainly what only the human knows, never approve on their behalf — the guardrail stays human.
- Cross-learning by role. Individual counterparts feed a role agent: every AM's difficulties, workarounds and initiatives compile into the AM skill at company level. Person → role → company, so one AM's good practice becomes every AM's default.
Why this is cheaper than it sounds
It is the generalisation of loops that already run:
| Piece | Already exists as |
|---|---|
| Learning from reactions | taste_signals → taste_principles, read by workers at runtime |
| Personal memory files | skills/ — versioned by content hash, loaded at runtime, one owner per concept |
| Answering from evidence | Atlas Brain: deterministic basis pack, cited numbers, declared blind spots |
| Learning from actions | provenance on every artefact — who approved, edited, rejected, and what |
| Role-level compilation | the skill graph: a role skill owns the role's concepts, refreshed like the industry guides |
Sequencing honesty
The counterpart layer is the reason several earlier decisions were shaped the way they were, and it comes after its dependencies, not before:
- Auth — a counterpart without a verified person attached is a toy. This is the concrete trigger the roles decision has been waiting for.
- The work model carrying real activity — counterparts learn from actions; there must be actions to learn from.
- Then counterparts, starting with one role (AM) and one person, co-built, before generalising.
Sequence
Each stage makes the next cheaper. Skipping ahead is how the ten-disconnected-tools outcome happens.
| Stage | Status as of 23 Aug 2026 | |
|---|---|---|
| 1 | Client onboarding UI | /clients/new exists |
| 2 | Client success page — the spine | The gap. Built out of order — see below |
| 3 | Performance ingest — the keystone | Done. Meta ad-level, reconciling to the cent; conversion model per business type; naming convention closing lineage on import |
| 4 | Asset library | Blocked — no R2 keys, so creatives is empty |
| 5 | Work model | tasks exists with rows; no assignment or status flow |
| 6 | Scripting ecosystem | Still one skill file, not several agents plus a critic |
| 7 | Orchestrator | Not started — correctly, there is not yet enough to route between |
| 8 | Finance views | Partial: people, client_engagements, manpower costing — all on sample data |
| 9 | Atlas Brain | /brain exists; owner/employee data boundary not enforced |
What went wrong in the ordering, recorded because the doc warned about it
Steps 3 onwards were built hard while step 2 was skipped, and the result is the outcome this document opens by naming: roughly twenty endpoints, each defensible, that a person has to know about individually to use. Alex's words on 23 Aug: *"instead of just disconnected tools. I want my tools to enhance and work together."*
The endpoints were not wasted — the success page is a composition of them and could not have been built first. But the lesson stands: a capability nobody can reach from the client record is not yet part of the product. Build the spine early even when the organs are more interesting.
The standing tension
Alex wants it fast, cheap in tokens, and not laggy. Those pull in the same direction more often than they conflict: the deterministic path is both the cheap one and the fast one. Reach for an agent when the answer genuinely cannot be computed — and when reaching, prefer one call producing many outputs over many calls producing one.