Skip to main content
vibld

Template

RoundUp

A directory of recently funded startups with faceted filtering by category, funding stage and amount, plus a startup news section and a 'today's funding' feed. Admins manage companies, rounds and articles through a role-protected panel. It serves investors, job seekers and founders scanning the funding landscape.

Startup funding directory and newsroom · App · Small tools and apps · full-stack app (auth + DB)

Who it is for

  • Angel investors and VCs scouting deals
  • Job seekers targeting freshly funded companies
  • Founders researching competitors
  • Startup journalists and newsletter writers

Layout

  1. Header: yellow-dot logo + name left, wide rounded search field center, outlined 'Startup News', black 'Today's Funding' and yellow 'Sign In' pills right
  2. Page title 'Discover Funded Startups' with subtitle
  3. Two-column: pale blue-grey rounded filter sidebar (Categories radios, Funding Stage radios, Max Funding log slider, Clear) and results area with count + sort dropdown
  4. Results list of startup cards (empty state with funnel icon and Reset Filters shown)
  5. Startup detail with funding rounds and investors
  6. News list and article pages
  7. Admin panel with resizable panels for CRUD and publishing workflow

Palette

Clean, utilitarian, energetic, data-forward, approachable. A bright, no-nonsense research tool.

  • background#ffffff
  • text / primary#121417
  • accent yellow#ffd129
  • sidebar surface#f1f5fb
  • border / muted#d2d8e4
  • secondary text#5f6773
  • input border#7c8db0

Every checked pair, measured again

SampleWhereRatioNeeds
Aabody text on background18.45:14.5:1
Aabody text on sidebar surface16.86:14.5:1
Aasecondary text on background5.72:14.5:1
Aasecondary text on sidebar surface5.22:14.5:1
Aawhite on black pill18.45:14.5:1
Aanear-black text on yellow accent12.66:14.5:1
input/radio border on background3.34:13:1
input/radio border on sidebar surface3.05:13:1
focus ring on background18.45:13:1
Aadark theme: text on base15.69:14.5:1
Aadark theme: muted text on base7.41:14.5:1
dark theme: yellow accent on base12.96:13:1

As vibld’s tokens

The palette on the fifteen colour tokens vibld styles a project with, each text colour on the fill it is read on. Marked tokens are solved from the palette, because no swatch held that role at 4.5:1.

  • background
  • card
  • muted
  • primary *
  • secondary
  • accent
  • destructive *

Type

Display
System SF Pro Display 600, 40px page title (the system face is not on Google Fonts; a vibld project loads Inter)
Body
SF Pro/system 16px, 15px in dense lists (SF Pro is not on Google Fonts; a vibld project loads Inter)

System font stack for a native, utilitarian data-app feel; yellow accent gives brand energy

Spacing and imagery

Full-width with 32px gutters, 240px sidebar, compact 24px-row filter lists; 8px radius, pill buttons; minimal shadows

Company logos in cards; empty-state line icons; charts for funding totals; no photography.

Components

  • Global search input
  • Pill nav buttons
  • Collapsible filter sections
  • Radio filter lists
  • Logarithmic range slider
  • Sort dropdown (6 options)
  • Startup card (logo, name, category, stage, amount, date)
  • Empty state with reset
  • Skeleton loaders
  • Funding round table with investors
  • News article card
  • Admin CRUD tables with status workflow
  • Resizable admin panels
  • Toasts

Interactions

  • Live search across names and descriptions
  • Filters combine instantly with result count
  • Log-scale slider snapping to meaningful amounts
  • Sort switching
  • Skeleton shimmer while loading
  • Collapse/expand filter groups
  • Admin draft→published status changes with toast
  • Dark mode toggle

Data

  • Startup{id, name, slug, logo_url, description, category, website, hq, founded_year, total_funding}
  • FundingRound{id, startup_id, stage, amount_usd, announced_on, lead_investor, investors[]}
  • Article{id, title, slug, body, cover_url, status(draft|published), published_at, author_id}
  • Profile{id, role(admin|editor|user)}

Build prompt

The baseline every prompt in the catalog assumes, then this design’s own ten sections, from goal to guardrails.

The baseline
### How to use these prompts
Paste a template's build prompt into your coding agent as the first message. Each prompt names its own stack, tokens and acceptance criteria; the rules below apply to all of them and can be prepended once per project.

### Engineering baseline
- TypeScript strict mode, no `any`, small typed components, feature folders, and one source of truth for design tokens (CSS variables consumed by Tailwind).
- Validate every input with a shared zod schema on the client and again on the server or edge function. Never trust client-side checks alone.
- Show loading, empty and error states for every async view. Surface errors in plain language with a retry, and log details to the console in development only.
- Keep secrets out of the bundle. Only publishable keys (for example a Supabase anon key) belong in client code; service-role keys, API keys and webhooks live in server or edge-function environment variables.

### Data and auth baseline (full-stack templates)
- Enable Row Level Security on every table before inserting data. Default-deny, then add owner-scoped policies (`auth.uid() = user_id`) and explicit role checks for admin views.
- Store roles in a separate table checked by a security-definer function, never in a user-editable profile field.
- Upload files to private storage buckets with size and MIME limits, and serve them through signed URLs.
- Rate-limit public endpoints (forms, auth, AI calls) and add a honeypot field or captcha to anonymous forms.
- Take payments through a hosted checkout and verify webhooks by signature. Never handle raw card data.

### Accessibility and UX baseline
- Target WCAG 2.2 AA: 4.5:1 contrast for normal text and 3:1 for large text, input borders, focus rings and meaningful icons or chart lines. Every palette in this catalog lists its verified pairs; re-check with a contrast tool after any colour change.
- Keep body text at 16px or larger with 1.5 line height, nothing below 12px, no light weights under 24px, and uppercase only for short labels.
- Give every interactive element a visible focus ring, full keyboard support, semantic landmarks, labelled form fields, and alt text on meaningful images.
- Respect `prefers-reduced-motion` for every animation. Give drag-and-drop and carousels keyboard and button alternatives.
- Build mobile-first and test at 375px, 768px and 1280px.

### Content guardrails
- Use original copy, fictional sample data and placeholder or licensed imagery. Do not reuse another product's name, logo, screenshots or marketing text.
- Label demo testimonials and metrics as samples. Collect the minimum personal data the feature needs.
### Goal
Build **RoundUp**, a searchable directory of recently funded startups with a small newsroom. Visitors filter companies by sector, stage and size of raise, sort results, and open profiles listing every round and investor; a "Today" feed shows the latest announcements. Editors publish news and maintain records through an admin panel. The job: answer "who just raised, how much, from whom" in seconds.

### Stack
React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui (Radix), lucide-react. TanStack Query for queries and caching; react-hook-form + zod for admin forms; Recharts for sector/stage totals; react-resizable-panels for the admin workspace; Sonner for toasts; date-fns for dates; Embla for a featured-rounds carousel. Supabase: Postgres (startups, rounds, articles), Auth with roles, optional Edge Function to import rounds from an external feed.

### Pages & layout
1. **Discover** – header (logo dot + name, wide rounded search, pill links: News, Today, Sign in). Title and subtitle. Left rounded sidebar: category list, stage list, max-funding slider on a log scale ($0–$100M+), Clear. Right: "N startups" + sort select (newest/oldest, amount high/low, A–Z/Z–A), card list or grid, pagination.
2. **Startup profile** – logo, description, sector/stage tags, totals, rounds table with investors, related news.
3. **Today's Funding** – chronological feed grouped by hour/day.
4. **News** – article list and article page.
5. **Admin** – resizable panes: list ↔ editor; startups, rounds, articles with draft/published status; users & roles.

### Design system
`--background: #ffffff`, `--foreground: #121417`, `--primary: #121417`, `--accent: #ffd129`, `--surface: #f1f5fb`, `--border: #d2d8e4`, `--muted-foreground: #5f6773`, `--input-border: #7c8db0` (`--border` stays for decorative card outlines). Font: Inter or system stack; 40px/600 page title, 16px/600 section, 16px body, 15px dense list rows, 12px minimum for meta; line-height 1.5. Spacing 4-pt, 24px card padding. Radius 8px, pills for nav buttons and search. Shadows none except menus. Motion 150ms; skeleton shimmer 1.2s. Provide dark theme (#0f1115 base, #e8eaee text, #9aa3b0 muted, yellow accent unchanged).

### Components & interactions
SearchInput (debounced 250ms, clear), FilterGroup (collapsible, count badges), LogSlider (formatted "$2.5M", keyboard steps), SortSelect, StartupCard (hover border darken), Skeletons, EmptyState ("No startups match" + Reset), RoundsTable, ArticleCard, AdminTable (sortable, bulk status), StatusBadge (draft/published), Toasts for save success/error.

### Data & state
`startups`, `funding_rounds` (FK), `articles`, `profiles(role)`. Filters, sort and search mirrored in URL params. Server-side filtering via Postgres queries with indexes on category, stage, amount, announced_on. Seed ~60 fictional startups and ~100 rounds with invented investor names.

### Accessibility
Filters are fieldsets with legends; radio/checkbox groups labeled. Slider has `aria-valuetext` in currency. Result count announced via `aria-live` after filtering. Yellow #ffd129 buttons use near-black text (≥ 12:1); never yellow text on white. Visible focus rings; skip-link to results. Tables have header scopes. Verified contrast: body text #121417 on #ffffff = 18.4:1; secondary text #5f6773 on #ffffff = 5.7:1; white #ffffff on #121417 = 18.4:1; near-black text #121417 on #ffd129 = 12.6:1; dark theme: text #e8eaee on #0f1115 = 15.6:1.

### Security
RLS: public read for published startups/rounds/articles; write restricted to `role in ('admin','editor')`; role changes admin-only. Validate admin input with zod client-side and DB constraints (amount ≥ 0, valid URL). Sanitize article HTML/markdown with DOMPurify; external links `rel="noopener noreferrer"`. Import Edge Function keeps third-party API keys server-side and is admin-invoked only.

### Performance & SEO
Paginate or infinite-scroll 24 at a time; lazy-load logos. Server queries use indexes. Startup and article pages get meta/OG tags and semantic headings; generate sitemap. Lighthouse 90+.

### Guardrails
- Fictional companies, investors and amounts only; no real logos.
- No invented quotes attributed to real people.
- Store no personal data beyond admin accounts.
- Typed small components, no `any`, visible errors and empty states.
- Done when: combining category + stage + amount + search returns correct results with URL persistence, all six sorts work, profiles show rounds, an editor can publish an article, and a regular user cannot write.

Open the builderAll templatesThis palette on its own