RONIN

Ops HQ

Internal — sign in to continue
Brand

The rules, and the actual files.

Colors, type, motion, logo lockups, and copy conventions.

Colors

Void anchors everything. Mint is the everyday accent. Crimson is reserved for high-emphasis moments. Click a swatch to copy its hex.

Void#0A0A0A
Ink#1A1A1A
Graphite#2A2A2A
Smoke#6B6B6B
Steel#E8E8E8
Mint#00FFB2
Crimson#C41E3A

Mint and Crimson are a dual-accent system — separate territories, never combined in the same component. Mint drives everyday interaction; Crimson is reserved for moments that matter.

Mint Territory
Active tab / selected states, toggle / switch on-states, the logo slash (always), progress bars & data highlights, links & secondary actions.
Crimson Territory
PRs & milestone completions, high-emphasis CTAs, the strength tag color, share-card accents. Never used for routine UI.

Semantic colors — functional, for system states only. These sit outside the Mint/Crimson brand territory.

Sky#3E7BFA
Lemon#FFEB3B
Ash#3A3A4A
Sky — success states, completion, on-track. Lemon — warnings, used sparingly. Ash — deload/rest, cool restful states.

Typography

Two working typefaces. A third exists only inside the fixed logo artwork.

Space Mono — Headlines, labels, CTAs, buttons
Not Motivation. Mechanics.
Barlow — Body copy, paragraphs, form inputs
In feudal Japan, a ronin was a samurai without a master.
Chakra Petch — Wordmark & monogram lockup only RONIN wordmark
Baked into the fixed logo/monogram PNGs as artwork — never loaded or set as a live web font. RONIN-branded text on a page is Space Mono, not Chakra Petch.

Motion & Interaction

TokenValueUsed for
Easingcubic-bezier(0.16, 1, 0.3, 1)Every transition, no exceptions
Fast duration200msHover/press feedback
Slow duration600msScroll-triggered section reveals
Every motion effect needs a prefers-reduced-motion override.

Dark & Light Mode

RONIN defaults to dark, but the mobile app and web app both let the user switch to light mode freely — it's a full, first-class theme, not a fallback. These rules keep both consistent.

Dark Is Default
Mobile app and web app both open in dark mode out of the box. It's the recommended, primary experience — but not the only one.
Light Is a Full Toggle
Available in Settings on both mobile and web. Light mode gets full parity — every screen has to work in both themes, not just a partial fallback.
Never Mix Modes in One Surface
A screen, card, or post commits fully to one theme. No hybrid panels, no dark card floating on a light page.
The Logo Always Swaps
White wordmark/monogram on dark backgrounds. Black wordmark/monogram on light backgrounds. The mint slash never changes color, in either mode.
Neutrals Fully Swap
Use the dedicated light-mode neutral palette below — don't simply lighten or invert the dark-mode grays.
Mint Behaves Differently by Mode
On dark, mint text and UI read at full contrast. On light backgrounds mint can wash out — use it only as fills, icons, chips, or thick strokes in light mode, never as small body text.
Crimson Holds Up in Both
Crimson has enough contrast on both Void and Paper. It's the one accent that doesn't need a mode-specific treatment.

Light Mode palette — a dedicated neutral set, not an inversion of the dark palette. Mint and Crimson carry over unchanged.

Paper#FFFFFF
Cloud#F7F7F7
Mist#E2E2E2
Slate#777777
Onyx#0A0A0A

Mode reference — the same card, side by side. Mint marks routine status, Crimson marks the moment that matters — never both on the same chip.

Push Day — Week 3
6 exercises · 74% compliance
On TrackNew PR
Dark — Default Theme
Push Day — Week 3
6 exercises · 74% compliance
On TrackNew PR
Light — User Toggle
App icon is a fixed asset — it doesn't retheme with the setting. One background always: Void #0A0A0A, solid fill, white monogram only (never black, since the background never goes light). 1024×1024 master, monogram kept within the centered ~60% safe area so OS masking doesn't crop it.

Logo & Icon Lockups

The current, canonical set — what's actually live on ronin.cool today.

⇩ Download All (ZIP)
ronin_logo_white.png500 × 236 · dark backgrounds⇩ Download
ronin_logo_black.png500 × 236 · light backgrounds⇩ Download
ronin_monogram_white.png750 × 774 · dark backgrounds⇩ Download
ronin_monogram_black.png250 × 247 · light backgrounds⇩ Download
ronin_favicon.png512 × 512 · browser favicon⇩ Download
ronin_slack_workspace_icon.png512 × 512 · Slack workspace icon (same artwork as favicon)⇩ Download
Asset History — earlier generations (superseded)

Genuinely earlier versions, kept for reference. Don't use these in new work.

2026-08-13

RONIN_Wordmark_White_FINAL.png⇩ Download
RONIN_Wordmark_Black_FINAL.png⇩ Download
RONIN_Monogram_White_FINAL.png⇩ Download
RONIN_Monogram_Black_FINAL.png⇩ Download
RONIN_App_Icon_1024.png⇩ Download

2026-08-06 — original drafts

RONIN_Logo_6Aug26.png⇩ Download
RONIN_App_Icon_White_6Aug26.png⇩ Download
RONIN_App_Icon_6Aug26.png⇩ Download

Copy & Voice Conventions

Tagline Punctuation
Train like a warrior, live forever.
Train like a warrior. Live forever. — period, not comma.
Alpha Program
Title-case as a formal, named program: Alpha Program, Alpha athletes.
No Kanji / Literal Samurai Imagery
The "ronin" reference is conceptual — not literal. No katana emoji, no kanji, no samurai illustration.
Health/Medical Framing
Never "dosing" language in marketing copy. Any page touching Protocols/Calculator content needs a visible "not medical advice" disclaimer near that content.
Voice
Direct, disciplined, no fluff. "Not motivation. Mechanics." is the whole editorial thesis.

Do

  • Use Space Mono for headlines, labels, buttons
  • Keep Crimson reserved for high-emphasis moments
  • Add a reduced-motion override for any new animation
  • Update this app when a rule changes — it's the source of truth

Don't

  • Set live text in Chakra Petch
  • Use Mint for large fill areas
  • Reference specific dosing numbers in public marketing copy
  • Let a spreadsheet or PDF become the "real" version of something this app tracks
Marketing

Channels, content, and campaigns.

Where things run, what's planned, what's live.

Instagram @ronin.cool ↗
Waiting on embed

Using Instagram's own free post embed instead of a paid widget service. Open a post on instagram.com → ••• menu → Embed → copy the code, and hand it to Claude — it goes right here.

Mailchimp
Loading…

Where We Stand

Current State
~50 alpha users, varying activity levels, positive feedback. Instagram: 2 posts live, 21 followers. Landing page live with alpha signup form (free lifetime access in exchange for early feedback). Mailchimp audience segmented and tagged, synced with Supabase backend.
90-Day Priority
Grow alpha users through referrals — not raw follower count or list size for their own sake. Every recommendation below is built around that goal.
Team Capacity
Two people, under 2 hours/week of content creation time. Everything here is designed to run mostly on automation once built, with a single monthly batching session for Instagram.
⚠ Open Decisions — resolve before full send/publish
  • The peer-referral incentive for regular alpha users (what the referrer gets, distinct from the free-lifetime-access the referee gets) — needed before Email 3 of the onboarding flow goes live.
  • Whether Supabase is currently pushing session-activity data into Mailchimp — needed to segment active vs. low-activity users correctly.
Part 1 — Email Automation FlowMailchimp · synced with Supabase

Goal: turn alpha users into active users, and active users into referrers.

Segments to confirm exist in Mailchimp (tag-based)

SegmentTrigger conditionPurpose
new-alpha-userAccount created / alpha access grantedOnboarding flow
active-user3+ sessions in trailing 7 days (sync from Supabase)Nurture + referral ask
low-activity-user0 sessions in trailing 7-10 days after signupRe-engagement
referred-someoneHas generated ≥1 successful referralThank-you / reward confirmation, exclude from referral asks

If Supabase isn't currently pushing session-frequency data into Mailchimp as a custom field/tag, that's the one integration gap worth closing first — every flow below depends on being able to segment by activity, not just signup date.

FLOW 1 — New Alpha User Onboarding
Trigger: tag new-alpha-user applied · Cadence: Day 0, Day 3, Day 7 — fully automated, no manual sending

FLOW 2 — Active User Nurture
Trigger: tag active-user (3+ sessions/week) · Cadence: monthly, automated send on a fixed date (e.g. 1st of month) to everyone currently holding the tag

FLOW 3 — Re-engagement
Trigger: tag low-activity-user (no session in 7-10 days post-signup) · Cadence: single, one-time send (don't loop this — repeated re-engagement emails to the same non-responder just trains people to ignore you)

What NOT to Automate Yet

  • No win-back flow for people who never activated at all (signed up, zero sessions ever) — with only ~50 users, a personal check-in from Andy beats an automated email for this tiny group.
  • No weekly newsletter. At this stage, a weekly cadence with <2 hrs/week of content time will either get skipped or feel thin. Monthly is honest and sustainable.

Setup Checklist

  • Confirm Supabase → Mailchimp sync includes session-frequency data (needed for active-user / low-activity-user tags)
  • Decide the actual referrer-side incentive (flagged above in Flow 1, Email 3)
  • Build the three flows in Mailchimp's Customer Journeys / Automations
  • Set the monthly active-user send as a recurring campaign, not a journey (since it targets whoever currently holds the tag, not people entering a journey at a fixed point)
  • Test all three flows with a dummy account before turning on for real users
Part 2 — Instagram Content Calendar (Month 1)1 feed post/wk · 2-3 Stories/wk · 1 Reel/mo

Cadence: 1 feed post/week · 2-3 Stories/week · 1 Reel/month · batch-create monthly (~2 hrs). Current state: 2 posts live, 21 followers — this plan starts building sequence from here.

How the algorithm actually treats each format (so effort goes where it pays off)

  • Reels get the widest reach — Instagram actively pushes these to non-followers. This is your only real discovery lever at 21 followers. Worth the disproportionate effort once/month.
  • Feed posts get shown mostly to existing followers first, then expand based on early saves/shares/comments in the first hour. A strong hook in the first line of the caption and the first frame of the image matters more than caption length.
  • Stories don't drive discovery but they drive relationship — they're what makes someone who already found you decide you're a real, active thing worth trusting. This is where "behind the scenes, two-person team building this" content belongs — it's low-effort and it's exactly what Stories are good at.
  • Consistency beats volume at small-follower accounts. Missing a week hurts more than posting slightly less.
Week 1 — Reintroduce the problem/solution
Feed post (Mon/Tue, ~11am-1pm local): Visual — one existing iPhone rendering showing the app's core screen. Hook (first caption line): "No app does both. So we built one." Body: 2-3 sentences on the gap — training apps track workouts, peptide apps track dosing, nothing does both. Direct/self-sovereign voice — no hedging, no "we think maybe." CTA: link in bio for alpha access (free lifetime access framing). Hashtags (3-5, not 20+): mix broad + niche, e.g. #selfcoached #periodization #biohacking #trainingapp.
Story 1 (midweek): Poll — "What do you track more carefully: training or recovery/protocols?" (engagement bait that doubles as informal market research)
Story 2 (end of week): Simple stat/progress post — "50 people already in the alpha" with a screenshot-style graphic. Builds social proof cheaply.
Week 2 — Train pillar
Feed post: Visual — mesocycle builder or workout logger rendering. Hook: "Programming like a coach, without hiring one." Caption speaks to the self-directed athlete — per-set RIR/RPE targets, structured progression, no outsourcing your training to a generic app. CTA: same link-in-bio ask.
Story 1: Quick tip format — one useful, standalone piece of training knowledge (e.g. what RIR actually means) with logo/branding overlay. Doesn't need to mention the app every time — pure value builds trust.
Story 2: Repost/screenshot of any positive user feedback so far, if you have any usable quote from the 50 alpha users (even a DM screenshot, credited or anonymized).
Week 3 — Protocols pillar
Feed post: Visual — peptide calculator rendering. Hook: "The calculator is free. Forever." Explain what makes the calculator different — this is the free acquisition engine, lead with that. Keep language careful and non-clinical per existing legal/brand guidance — "educational info," not prescriptive dosing claims.
Story 1: FAQ-style — answer one common question about protocol tracking (text-overlay only, no camera needed)
Story 2: Poll or question sticker — "Are you currently tracking protocols in a spreadsheet, an app, or nothing?" (useful both for engagement and for validating messaging)
Week 4 — Social proof + the month's Reel
Reel (highest-effort item — plan for it first when batching): 15-30 sec screen recording of the app in use, with text-overlay captions (voiceover optional — works fine without appearing on camera). Structure: hook in first 2 seconds ("This app does something no other training app does") → quick show of Train + Protocols → end card with CTA. No camera required — sidesteps the on-camera question entirely while you decide.
Feed post: Testimonial/quote card in brand colors (mint/crimson per style guide), or a "why I built this" founder note if comfortable sharing — Week 4 is where founder authenticity outperforms another feature post.
Story: Recap of the month + explicit referral/waitlist push — "If you know someone who'd use this, the link's in bio. Free lifetime access if you're in early."

Batching Workflow (fits your <2 hrs/week budget)

  • Once a month (~90-120 min): write all 4 captions, create/select all visuals in Canva using branded templates, record the one Reel, write all 8-10 Stories as text/graphics.
  • Load everything into Buffer or Later with the schedule above pre-set.
  • Ongoing weekly time (~10-15 min): reply to comments/DMs, react to what's actually landing, adjust next month's batch based on what performed.

What to Track (keep it simple)

  • Which single post/Reel got the most saves or shares (not likes — saves/shares signal algorithm-favored content)
  • Story completion rate on the Story that mentions the app vs. the one that doesn't (tells you if value-first or ask-first Stories work better for this audience)
  • Bio link clicks per week (your actual funnel metric, more relevant than follower count for the 90-day goal)

Open Decision to Revisit
The on-camera question is still unresolved. Nothing in this month's plan requires it — but if reach plateaus after Month 1-2, founder-on-camera content (even low-production, phone-selfie style) is usually the single biggest reach unlock for small accounts in this niche. Worth revisiting once there's a month of data.

Userbase

Coming in Phase 3

Not built yet

Live view of the waitlist_signups table from Supabase.

Finance

Coming in Phase 2

Not built yet

Expense ledger — date, description, amount, paid by.

Roadmap

Coming in Phase 5

Not built yet

Status-tracked feature list: idea → planned → in progress → done.