A working doc for designers and storytellers contributing to the Relational Tech Studio. Pairs with README.md (project overview) and HACKATHON.md (agency-building brief).
The Studio is "warm craft": serif headlines (Fraunces) over a clean humanist body (Inter), set on an off-white/cream canvas with terracotta accents. It should feel handmade and neighborly — closer to a printed zine or a community library than a SaaS dashboard. No purple gradients. No generic AI shimmer. Bold typography and generous space do most of the work; motion and color are used sparingly, with intent.
| File | What lives there |
|---|---|
src/index.css |
HSL color tokens, gradients, shadows, @font-face declarations, base layer styles |
tailwind.config.ts |
Token → utility mapping, fontFamily, custom spacing/radii |
src/components/ui/* |
shadcn primitives (Button, Card, Dialog, etc.) — owned in-repo, restyled via CVA variants |
src/components/Footer.tsx, TopNav.tsx |
Shared chrome on every page |
Page surfaces most likely to be redesigned
src/pages/Landing.tsx— hero, tool gallery, "What's Inside" gridsrc/pages/Home.tsx— logged-in two-column dashboard (Sidekick + sidebar)src/pages/Library.tsx— full library browsesrc/pages/Profile.tsx— builder profile, vision board, commitments, prototypessrc/pages/SidekickPage.tsx— full-screen chatsrc/pages/Support.tsx— Builder's Guide and Gift Build requests
Card surfaces (high reuse)
src/components/LibraryCard.tsxsrc/components/ToolGalleryCard.tsxsrc/components/StoryCard.tsxsrc/components/PromptCard.tsx
- All colors are HSL, defined as CSS variables in
src/index.css, then surfaced as Tailwind utilities throughtailwind.config.ts. - Never use raw color classes in components (
text-white,bg-black,text-red-500). Always use semantic tokens:bg-background,text-foreground,bg-primary,text-muted-foreground,border-border, etc. - Adding a new color = add the token first, then use it. If you find yourself reaching for a hex value inside a component, stop and go define a token.
- Gradients and shadows that get reused belong in
index.cssas variables (--gradient-warm,--shadow-soft), not inlined. - Both light and dark variants must remain legible if a token is changed.
- Fraunces for headings and display copy. Inter for body. No substitutions, no Poppins, no Inter-as-headline.
- Use the configured Tailwind families (
font-serif,font-sans) rather than re-declaringfont-familyin components. - For animation, reach for framer-motion. Prefer one strong, well-timed moment (a hero reveal, a card entrance) over scattered micro-interactions.
- Respect
prefers-reduced-motionfor anything beyond a fade.
| Asset type | Location | How to use |
|---|---|---|
| Fonts, PDFs, favicons, robots.txt | public/ |
Reference by absolute path (/Builders_Guide_RTP.pdf) |
| Imagery imported by components | src/assets/ |
import hero from "@/assets/hero.jpg" so Vite hashes it |
| Custom font files | public/ or src/assets/fonts/ |
@font-face in index.css → expose in tailwind.config.ts fontFamily |
Prefer .jpg for photos, .png only when transparency is required, .svg for icons and logos.
- No new dashboards or orientation tours. The product stays focused on chat + library.
- Sidekick stays a collaborator, not a cheerleader. No flattery copy ("I love that idea!"), no exclamation-heavy microcopy.
- Do not edit
src/integrations/supabase/client.tsorsrc/integrations/supabase/types.ts— both are auto-generated. - Do not edit
.envor project-level keys insupabase/config.toml. - A frontend redesign should not touch
supabase/functions/*or create database migrations. If a visual change requires new content shape, raise it as a separate backend conversation. - Tool cards in the library follow the authenticity principle: real photos, real voice, no AI-generated stock imagery.
There are two lanes. They coexist — pick whichever fits the change.
- Prompt changes in the Lovable editor at https://lovable.dev/projects/f5b53aa4-443c-4aa1-8a94-b5a696f8b512.
- Each change auto-commits to GitHub and updates the preview URL instantly.
- Frontend changes appear in preview but are not live until you click Publish → Update in the editor.
- Backend changes (edge functions, migrations) deploy automatically on save — no extra step.
git clone <repo-url>
cd relational-tech-studio
npm i
npm run devWork on a branch, push to GitHub, and Lovable picks the changes up in preview. Publish from the Lovable editor as in Lane A.
- Preview: https://id-preview--f5b53aa4-443c-4aa1-8a94-b5a696f8b512.lovable.app
- Published: https://rtstudio.lovable.app
- Custom domain: https://studio.relationaltechproject.org
When prompting the Lovable agent for design work:
- Reference tokens, not hex values. "Use
bg-primaryandtext-primary-foreground" beats "use #C25B3F". - Reference files by path. "In
src/pages/Landing.tsx, restyle the hero…" is much more reliable than "redesign the homepage." - Use plan mode for larger redesigns. Ask for a plan first ("plan a redesign of the Library card grid"), review, then approve. This prevents sprawl.
- Keep design and logic separate. Phrase requests as visual/presentation changes ("update spacing, typography, and color of the card") so the agent doesn't drift into business logic.
- One surface at a time. Land changes to one component or page before moving to the next — easier to review and revert.
relationaltechproject.org is a separate codebase and is not connected to this repo. Two options for keeping the visual language consistent:
- Bring it into Lovable as a sibling project that shares the same tokens and font setup. Cleanest long-term, requires a one-time port.
- Sync visual language manually — replicate token values and type scale by hand whenever the Studio's system changes. Lower lift, higher drift risk.
Decision deferred. Worth picking before significant marketing-site design work begins.
- Storybook, Figma sync, or other tooling — happy to add if/when it's useful.
- Content strategy and copy guidelines — see
HACKATHON.mdand the Sidekick persona memory for tone rules.