Transition handbook

Everything I worked on for Sahara and where it lives, written for Jane and Frank. The first table is the map. Each section after it covers one project: what it is, what shipped, what is still open and where to find it.

Where everything is

Every project with its code, where it runs and where the design lives. The sections below have the detail.

Project What it is Code and live Design source Start here
Sorin webapp The chat web app. Acquisition, chat, sharing, referral defi-agent-h5, usesorin.ai, dev.usesorin.ai Sorin Dev Figma docs/DESIGN-RULES.md in the repo
Sorin desktop app The Tauri desktop terminal. The product anchor sorin-app, download from heysorin.ai Chat Desktop App frame in Sorin Dev PR #236, the first design pass, palette in its body
Sorin Market Lens Chrome side panel for Polymarket and Kalshi price moves sorin-polymarket, unpacked extension plus a backend on a GCP VM Tokens in src/index.css docs/ folder in the repo
Custom dashboard Static Chart.js dashboard of the funnel, fed from PostHog sorin_custom_dashboard, GitHub Pages none data.js
PostHog Product analytics, project Sorin Beta posthog-prod.heysorin.ai none Dashboard 16, the bot filtered funnel
Sahara website The company site, built in Framer by an outside developer saharaai.com, Framer project Sahara 2.0 web design and the external file for the Framer developer The Design Progress doc under Files and documents
Brand The Sahara 2.0 rebrand and the Sorin design system export none Drive folders under Files and documents Sahara 2.0 Branding folder
CreatorLabs site Marketing site for the creator product creatorlabs-landing, creator-labs.ai CreatorLabs Figma, page CreatorAI V4 tools/build-pages.py
CreatorLabs app Signup, onboarding and portal of the product creator-lab-webapp, app.creator-labs.ai Same Figma file, page App Flow PR #152, brand kit v3 across 16 screens
Motion Agency site, separate from CreatorLabs motion-landing-page, agency-motion.com Same Figma file, page Motion agency, frame 1295:3545 PR #1
Strategy and research Three surface plan, funnel report, Minara analysis, chat backend handoff Markdown and PDF files, listed in Files and documents none Files and documents below
Deliverables tracking The team's Notion page for design deliverables Sorin Deliverables none Notion

Sorin webapp

The webapp is the companion surface: acquisition, chat, sharing and referral. Code lives in defi-agent-h5, the dev build is dev.usesorin.ai, and the team's GitHub Actions deploy it to Aliyun (dev, pre, prod). Everything is merged except #2325, the sidebar hierarchy, which was closed unmerged. Its branch is still on the repo if the team wants it.

What I shipped

Date PR What it did
2026-08-20 #2460 Design rules for the dev team: docs/DESIGN-RULES.md, a section in AGENTS.md and a nested src/components/AGENTS.md, so Codex and Cursor follow the system when they build prototypes
2026-08-10 #2325 Sidebar hierarchy: one prioritized list (Chat, Alpha Signals, Market Daily, My Portfolio, Strategy, Trading Copilot), one shared row component, every divider removed, a "new signals" badge. Closed unmerged, branch `style/sidebar-hierarchy` is still on the repo
2026-06-15 #1981 Density pass and CTA unification: every button filled, one radius, hover and active states on all of them
2026-06-11 #1974 Staged entrance animation on the empty chat homepage with Jane's rotating subtitle. The greeting went back to the static copy in the team's #2099
2026-06-08 #1951 Onboarding tutorial polish
2026-06-02 #1915 Title case sweep, page titles moved into the navbar, heading weights set to 400
2026-05-28 #1901 Invite and Earn modal redesign
2026-05-27 #1893 Chat response header: tools pill, header hidden on trivial answers, action chips ready for the backend
2026-05-25 #1868 Empty chat design pass, sign in toast on protected routes, Hot Topics as the default tab
2026-05-21 #1841 Intent Trading polish and the project wide type weight sweep

Where things are in the code

Working on it

Yarn 4 through corepack and Node 20, yarn dev runs on localhost:3000. Run the test suite with the dev server stopped, two tests use wall clock timing and fail under load. Branch from main, push to the repo (no fork), and request Jiangzhe12 as reviewer, he reviewed all my PRs.

Sorin desktop app

The desktop app is the product anchor: the Tauri terminal in sorin-app. I ran three design passes on it. Three PRs merged. #293 and #298 have been open since June with no review, and both now conflict with main. The Figma source is the Chat Desktop App frame in Sorin Dev.

What I shipped

Date PR What it did
2026-06-10 #298 Third pass: the paper trading campaign surface, a weight scale by text size, hardcoded hex swapped for the semantic surface tokens so the light theme renders again, ExploreDirections rebuilt without the glow
2026-06-03 #293 Second pass, parity with the webapp rules: title case, 400 weight headings, green only on strong CTAs, across the signed out and signed in views
2026-05-26 #250 Connector dialog, project wide type weight sweep, ExploreDirections
2026-05-20 #240 Dismissible paper trading campaign banner
2026-05-18 #236 First pass: titlebar, sidebar, modal, CTAs, toolbar dropdowns. This PR set the palette, its body lists every token

Where things are in the code

Working on it

pnpm. The pnpm-workspace.yaml file is not tracked in the repo, so after a fresh clone recreate it with the allowBuilds entries set to true or nothing boots. pnpm dev on localhost:1420 is enough for UI work, pnpm tauri:dev runs the full app. Type check with node_modules/.bin/tsc --noEmit. One lesson from this repo: edit the existing components in place. Parallel rewrites of the sidebar and chat stage were tried and reverted.

Sorin Market Lens Chrome extension

Market Lens is the Chrome side panel that flags price moves on Polymarket and Kalshi and explains them. Code is in sorin-polymarket. The team owns the runtime. My part was the Sorin design tokens and the first side panel pass, and only the tokens made it to main.

How it is built

Three layers, written up in docs/R1_extension_backend_worker_architecture.md in the repo. The extension only reads cached moves. A cache only API serves them. A worker does the discovery, refresh, ranking and Codex attribution and stores everything in SQLite. The backend runs on an emergency GCP VM at 136-116-239-244.sslip.io, runbook in docs/operations/. There is no real production host, auth or store build yet.

What I did

Date PR What happened
2026-06-23 #2 Native Chrome side panel, design token visual pass, extension icon, copy and spacing polish. Closed unmerged on 2026-06-18, the team shipped their own side panel migration as #3
2026-06-10 #1 Sorin design tokens and the Satoshi font baseline. Merged

What did not land

The visual pass from #2 lives only on the branch carlos/sidepanel-design-pass: a type scale of 11, 12, 14, 16 and 20px, radii of 8, 12 and 16, spacing tokens, Satoshi with tabular numbers everywhere, max weight 500, the colored price move chip, rounded mover rows and symmetric padding. If you want it, rebase just the CSS and visual bits onto main. The side panel plumbing conflicts are moot, theirs won.

Where things are

Tokens in src/index.css, the panel UI in src/panel/polymarketLens.tsx, the panel shell in src/extension/PanelApp.tsx. Yarn 4. yarn dev serves the demo wall, yarn extension:build writes dist/, which you load unpacked at chrome://extensions.

Design system

One system across the three Sorin surfaces: Satoshi, green on black, dark first, calm type. The full rules are in docs/DESIGN-RULES.md in the webapp repo, written so Codex and Cursor follow them when the dev team builds prototypes. This is the short version.

The palette, shared by the webapp and the desktop app

Hex Role Webapp token Desktop use
#000000 App background bg-primary-bg-prim-b Outer shell, titlebar, sidebar rail
#111112 Surface primary surface-primary-110-sf-prim-110 Sidebar panel, composer, default nav item
#1E1E1F Surface hover and active, dividers surface-primary-100-sf-prim-100, border-brdr-prim-100 Nav hover and active, modal sections
#252627 Surface secondary surface-primary-90-sf-prim-90 Dropdown hover, secondary CTA
#2D2D2F Surface tertiary bg-primary-bg-prim-80, border-brdr-prim-80 Modal frame, secondary CTA hover
#28FCAE Brand green surface-accent-primary Primary CTA only
#20CA8B Green hover surface-accent-primary-hovered, icon-text-accent Primary CTA hover
#DF1C41 Danger surface-critical-critical Danger CTA
#747580 Muted icon none Ghost icons

The webapp tokens were checked against the team's Semantic Tokens Figma file on 2026-05-20 with zero drift. Tailwind class names in the webapp double the prefix, so a background class reads bg-bg-primary-bg-prim-110.

The rules

  1. No font weight above 500. Headings are 400, buttons are 500, numbers may be 500.
  2. Apple style title case on titles, modal headers, button labels, nav items and tabs. Body copy, descriptions and placeholders stay sentence case.
  3. Green only for strong CTAs and real status (live, healthy, connected). Never on selected tabs, chips, taglines or decorative icons.
  4. Every CTA is filled, one radius (8px), with explicit hover and active states. No outlined buttons, no borders on buttons.
  5. Radii nest outer to inner: popover 16, inner panel 12, triggers 8. On desktop: nav items 8, toolbar dropdowns 12, sidebar panel 18, modal 24.
  6. Semantic tokens only, never raw hex. Raw hex is what broke the desktop light theme.
  7. Page titles live in the navbar, not in page bodies.
  8. Spacing on an 8pt grid.

Where the system lives

Analytics and growth

The numbers live in PostHog and the custom dashboard is the clean view of them. Use the bot filtered dashboards, the raw ones overstate everything by about half.

PostHog

Instance posthog-prod.heysorin.ai, project Sorin Beta. Access is by PostHog login, the API key I used is not in this doc.

ID Dashboard Use it for
16 Sorin Upper Funnel (bot filtered) Source of truth for the clean funnel
11 Sorin Upper Funnel Raw version, warehouse data with about a day of lag
22 Chat Metrics (bot filtered) Engagement
6 Chat Metrics Raw engagement
23 Retention and Engagement (bot filtered) Retention
21 Retention and Engagement Raw retention
10 Referral Referral code tracking
8 Login Error Tracking Login failures

Custom dashboard

Repo sorin_custom_dashboard, published on GitHub Pages at fluffy-carnival-2qy6ekq.pages.github.io for org members. Four sections: upper funnel, retention, engagement, acquisition quality. Plain HTML and Chart.js, no build step. data.js is the snapshot the page reads. GitHub Actions refresh it: hourly from PostHog (update-data.yml), daily bounded retention and daily credits from MaxCompute. A small Cloudflare Worker, sorin-dashboard-refresh, lets a viewer trigger the hourly workflow without seeing the PostHog key. The keys are repo secrets. docs/adding-maxcompute-source.md explains how a MaxCompute source was added.

What the data said (April to May 2026)

The three surface plan

Desktop is the product anchor, the webapp is the companion (acquisition, chat, sharing, referral, descope rather than expand) and the Chrome extension is the greenfield bet. The plan with its data backing, the deck content and the weekly funnel report are markdown files listed under Files and documents. The forced actions were: cut Intent Trading, run a two week sharing promo experiment before anchoring the story on sharing, and instrument four gaps (wallet events, connector usage, desktop install funnel, asset class tag).

Chat response redesign

Sorin's chat answers read like AI slop: conversational openers, hedging, random bold. In May I scouted Minara, the closest competitor, measured their response anatomy and shipped the frontend half of the fix. The backend half is still owed by the chat service team.

The five changes

  1. Strip the AI slop phrases from the system prompt and use editorial labels instead (Position, Risk, Summary).
  2. Editorial header pills: how long it took and how many tools ran.
  3. Bold only data points, never whole sentences.
  4. Follow up chips that mix research and action, so a chat is not a dead end.
  5. Match the length of the answer to the question. A two line question gets a short answer with no headings.

Frontend, shipped

#1893 in the webapp, merged 2026-05-27. A tools count pill next to the completed pill, the whole header hidden on trivial answers, and the suggestion chips already accept a type of research or action with an icon on action chips. Everything activates the moment the backend sends the field.

Backend, not shipped

It lives in the chat service repo, which was never mine. Four bundles of work: the phrase list to suppress, the bold rule, the follow up endpoint returning two research and two action chips with an action and params payload, and the short answer mode. The handoff doc has the exact phrases, the chip JSON schema, the brevity triggers and five test cases. It is listed under Files and documents, together with the Minara analysis and the screenshots.

What Minara does that Sorin does not

They show every tool call before the answer, give each tool its own output card, write the answer as a table plus bullets with linked sources, and end with chips like Buy 100 USD of BTC or Create a workflow to alert me. Their model list also exposes a fast model paired with a strong one, which is the composed routing Sorin runs invisibly in Auto mode.

CreatorLabs

CreatorLabs is the creator product. I owned the marketing site at creator-labs.ai from July to October (38 PRs, 34 merged), restyled the wizard app once, and produced the UGC ad videos. Everything on the site is live and verified as of 2026-10-06.

The site

Repo creatorlabs-landing, static HTML on Cloudflare Pages. A push to main is a production deploy, so always branch, open a PR and get a review. Repo admins are rich4here (Guang), lphuang0x00 and gugugugugujzheng. I have maintain, not admin.

When What shipped
2026-10-06 Frameless partner logos, the site review fixes, Behave relinked, accessibility pass and the chat avatar (#61 to #64)
2026-09-24 to 29 CCBill compliance: content policy page, age gate, 2257 statement, legal entity renamed to Here AI Technologies Americas Inc., OnlyFans wording removed, contact emails moved to hereai.ai (#56 to #60)
2026-09-14 to 22 v4: the six page site on the copy deck layout with the original visual system (#51), Terms and Privacy on the same skin (#52), Instagram link (#54)
2026-09-11 Crawler files: robots, sitemap, llms.txt, no JS visibility (#50)
2026-08-26 JSON-LD on every page and the Motion logo link (#41, #42)
2026-08-06 to 11 Redesign: three page split, denser scale, bento layout, page motion, partner logos, cache guards in CI (#33 to #40)
2026-07-03 to 08-01 v3 replica of the Figma, polish, mobile pass, new hero headline, partner links, tutorial video on the page, phone menu (#7 to #32)

How the site is built, the short version:

The wizard app

creator-lab-webapp, live at app.creator-labs.ai. #152, merged 2026-07-10, restyled all 16 screens to brand kit v3 and added a demo mode (pnpm demo, any credentials work) for previews without a staging account. Branch carlos/signup-page turns the odd /onboarding/password step into a proper /signup page that matches the login card. It is pushed, has no PR, and the team asked to review before one is opened. Still open in the app: the signup Terms text names Creator Labs AI LLC and support@creator-labs.ai, and the in app 2257 notice waits on legal's custodian details.

UGC videos

Short vertical ads for outreach, first with generated creators, then real models, then clones of real models with their permission. Finals are in the Drive folder UGC Videos - CreatorLabs and in the Higgsfield team folder CreatorLabs UGC ads (finals). Every prompt, script and build script is in my local creatorlabs-ugc folder, listed under Files and documents, with PROMPTS.md and SHOOT-SCRIPT-real-model.md as the two files to read first. A spoken script alone does not reproduce these, the prompt is six parts and the script is one of them.

SEO handover docs

A five engine SEO playbook and a 29 page Article Writing Guide (PDF and DOCX) with a 40 article keyword bank. Both are local files right now, listed under Files and documents.

Motion

Motion is a creator agency with its own site at agency-motion.com. It is a separate product from CreatorLabs, never overwrite one with the other. V4 has been live since 2026-08-19 and nothing is pending.

What shipped

Date PR What it did
2026-09-11 #2 Crawler files: robots, sitemap, llms.txt, no JS visibility
2026-08-19 #1 V4 design pass: full bleed film hero at native 1440p, liquid chrome objects, new photography, favicon cut from the wordmark

Where things are

Open, all decisions rather than bugs

Before April 2026

The sections above cover April to October 2026, when the design work moved into code. The earlier work, from the Sorin UX phases through the Sahara 2.0 rebrand, lives in Drive, Figma and Notion. These are the entry points, all linked under Files and documents.

Accounts and access

Everything I touched is reachable from accounts the company controls. Nothing in production depends on an account of mine. The one thing to do before my accounts close is move the ownership of my Drive files, listed in the next section.

Account or tool What mine holds What to do
GitHub, carlosl-sahara Member of SaharaAI-Agents and HereLabs. Push on sorin-app, defi-agent-h5, sorin-polymarket and motion-landing-page, maintain on creatorlabs-landing, write on creator-lab-webapp. Admin nowhere. Read on the other repos through the enterprise Remove the org memberships and the three direct collaborator grants (creatorlabs-landing, motion-landing-page, creator-lab-webapp). Branches and PRs stay
Figma, carlosl@saharalabs.ai A full seat on the Sahara team. The Sorin Dev file, the Sahara 2.0 web files and the CreatorLabs file live in team spaces, nothing sits in my drafts Reassign the seat
Framer The Sahara 2.0 site project Make sure the project and the Framer developer's access are on a company account, not mine
Notion The Sorin deliverables page Remove my seat
PostHog A login on posthog-prod.heysorin.ai and a personal API key I used for scripts Revoke the key, remove the login
Google Workspace, carlosl@saharalabs.ai The Drive files in the next section, plus edit access to the Copy Deck and the CCBill sheet Transfer ownership of my files to Jane or a shared drive before the account closes
Cloudflare, company account The creator-labs.ai and agency-motion.com Pages projects. GitHub Actions deploy them with the repo secrets Nothing. I never had the dashboard
Cloudflare, my personal account Preview sites only: creatorlabs-preview.pages.dev, v4.motion-landing.pages.dev and the signup demo worker They go away with me. Nothing links to them from production
Higgsfield A seat on the Here AI team workspace, where the UGC videos were generated and billed. The shared folder CreatorLabs UGC ads (finals) holds the raw renders Remove me from the team, the folder stays
GitHub Pages dashboard The custom dashboard at fluffy-carnival-2qy6ekq.pages.github.io is published by the SaharaAI-Data org, refreshed by its own Actions with org secrets Nothing
Local only Clones of every repo and the working files on my Mac The files that matter are in the next section. Everything else is on GitHub

Files and documents

Everything that is not code is either in my Drive or on my Mac. The Drive files stay if someone takes ownership before my account closes. The local files stay with me. Ask if you need one.

In my Drive (carlosl@saharalabs.ai)

Name Type What it is
Sorin Agents Guidelines Folder The Sorin design system export: semantic tokens and text styles as JSON, the design system zip, the Satoshi font, reference screens
Sahara 2.0 Branding_2026 Folder The rebrand kit: brand kit, guidelines, logos, fonts, email signatures, post templates, social profiles
2026 Rebrand Sahara 2.0 Folder Earlier cut of the same rebrand, with the illustrations and the Brand Guide 2026 PDF
Sorin Launch 2026 Shared folder Launch video, logo and icon, social posts and profiles
KBW Booth Video Loop Shared folder The Korea Blockchain Week booth loop and its slides
Videos Folder Sahara Token Video, Sahara V3, flip board clips, particle backgrounds
Letterhead Shared folder Company letterhead
AMA Backgrounds Folder Backgrounds for the AMA sessions
Slides - Templates Folder Deck templates
UGC Videos - CreatorLabs Shared folder The finished CreatorLabs UGC ads
Clones Shared folder The 15 real model clones from 2026-10-08
Creator AI Screen Recording Clips Folder CreatorLabs product tutorial clips: AI intro, CRM intro, OF Manager, dashboard insights, growth tools
Design Weekly Sync (recurring) Folder Meet recordings and Gemini notes of the design sync, latest 2026-09-15
Sorin - UX/UI Roadmap Doc The UX rules and the chat experience roadmap by module with priorities, from 2025-12-10
Sorin - UX/UI Tracker Doc Sprint by sprint design tracker for phases 3 and 4 (late 2025): dashboard, earn, login, referral and executor rebrand, mobile and PC
Agent Interaction Patterns Doc How the chat shows thinking, tool calls and sub agents, from 2025-11-27
Trader Persona - Reviewed Doc The Investment DNA personas with keywords, slogan and character profile
Persona Questions Doc The quiz questions behind the personas
UX, AI Efficiency Doc How I use AI across the design workflow, research to handoff
Design Progress - Jan 5th Doc Status note with the links to the Sahara 2.0 web design Figma, the external Figma for the Framer developer, the Framer project and the Notion deliverables page
Design Updates - Sep 10 Doc The latest priorities list: website updates, the AWS update design, the retreat items
Points & bonus rules in Season Alpha Doc Data Marketplace points and rewards copy
DeFi Copilot Video Production Instruction Doc Brief for the video vendor, with the vendor sheet
Higgsfield Scripts Doc UGC video scripts
New List of Articles, Example Article Docs CreatorLabs SEO article work
Sahara AI Overview Deck Company overview
SaharaAI Partner Deck Deck Partner deck, my version
Sorin Enterprise Partnership Deck, Exchange Deck Exchange partnership deck
Presentation Template - Sahara AI, Presentation Template - Sorin Decks The two deck templates
B2B Light Mode Slides PowerPoint Light mode B2B deck
Sorin Email List Sheet Email list, there is a second copy
saharaai.com Performance on Search Sheet Search Console export, 2025-10-16
Sahara Brand Video Vendor Form Sheet Vendor form for the brand video
Sahara whitepaper 2025-08-22 PDF The whitepaper

On my Mac

Folder or file What it holds
2026-04-23_Sorin_Upper_Funnel_Weekly_Report.md The first weekly funnel report and the corrected PostHog queries
2026-05-12_Sorin_3-Platform_Split_Plan_+_Data_Backing.md The three surface plan with its data backing
2026-05-13_Sorin_3-Platform_Deck_Content.md and _Deck_Slides.md The same plan as deck copy, cross checked against the dashboard
2026-05-27_Chat_backend_handoff.md The chat backend handoff: phrases to strip, chip schema, brevity triggers, test cases
2026-05-27_Minara_chat_UX_analysis_for_Sorin.md and minara-scout/ The Minara analysis with measured type and spacing, plus 13 screenshots
creatorlabs-seo/ SEO playbook, the Article Writing Guide as PDF and DOCX, the keyword autocomplete export
creatorlabs-ugc/ PROMPTS.md, SHOOT-SCRIPT-real-model.md, the build scripts and every version folder from v5 to v11
creatorlabs-ccbill/ The 2257 app screens audit, the row 5 draft, live screenshots and the verify script
townhall-agents-video/ The Designing for agents explainer (68 seconds) and its render pipeline
motion-agency/_src/ Motion QA scripts, the hero encodes and the comparison sheets
creator-wizard-web-design/ and invite-flow-screens/ Wizard design tokens, the app design file, the invite flow screenshots