Publishing Templates

Any dashboard you've deployed can become a template on the marketplace. A template is a live, working dashboard running on sample data — not a screenshot, not a code snippet. People browse it running, then fork it into their own project with one click and swap in their real data.

There are two ways to get there: build a showpiece on mock data from the start, or turn a real dashboard into a template by converting a frozen snapshot of it to mock data and pushing it back.

What a template is

A template is a frozen snapshot of your dashboard at the moment you publish:

  • The built app — served live on the template's marketplace page, exactly as it ran when you published. Redeploying your dashboard later doesn't change the template until you explicitly refresh it.
  • The source code — pinned as a zip so anyone can pull it, open it in their AI coding tool, and make it theirs.

Forks and pulls are full copies. Nothing connects back to your project, and nobody can touch your data — templates don't have any.

The mock-data convention

Templates are self-contained: no warehouse, no live queries. Every number lives in src/mockData.ts as typed, exported arrays. That one file is the swap point — someone who forks your template replaces its contents with useQuery calls against their own data, and the rest of the dashboard works unchanged.

// src/mockData.ts
export interface MrrPoint {
  month: string;
  mrr: number;
  customers: number;
}

export const MOCK_MRR_DATA: MrrPoint[] = [
  { month: "2025-07", mrr: 12400, customers: 31 },
  { month: "2025-08", mrr: 14200, customers: 35 },
  // ...
];

When you build something to publish, put every figure in this file. Real-data dashboards use the useQuery hook; templates use mockData.ts.

What never gets bundled. The CLI excludes .env, .env.local, and every other .env.* file when it packages your source, and honors a .overscoreignore file at the project root for anything else you want kept out. Your warehouse credentials never leave your project — and since a template has no live queries, there's nothing to leak even in the built app.

Requirements to publish

  • A deployed dashboard — the template is snapshotted from your latest deploy, so there must be at least one
  • Editor role — you need to be an editor or owner of the project
  • Public visibility — to take the listing public or unlisted, the dashboard must be published with access set to Public, so the marketplace preview renders for anyone
  • The mock-data attestation — you confirm the dashboard contains only sample/mock data, nothing real or private. A listing can't go public or unlisted until this is checked.

A private listing only needs the first two — it's your personal library, visible to nobody else, and it's where the template-copy flow below starts.

Building a showpiece from scratch

If you're building a dashboard specifically to publish, work mock-first: put every figure in src/mockData.ts from day one and never wire up a warehouse. When it looks the way you want:

  1. Open your dashboard in the Hub and click Publish as template in the header.
  2. Fill in the listing: title, tagline, description, a category, and tags.
  3. Under What data you'll need, tell people what it takes to make the dashboard real — one bullet per data source, markdown is fine. This renders on your template's page.
  4. Thumbnail: leave it blank and Overscore captures a screenshot of your live dashboard automatically, or upload your own image. A manual upload always wins.
  5. Check the attestation and publish.

Your template gets its own page at overscore.dev/explore/{slug} with the live preview, your description, and the install commands.

Turning a real dashboard into a template

Your best work probably already runs in production — on live queries and real data, which can never ship in a template. The convert-and-push flow bridges the gap without ever touching the original:

  1. Create the template. Open the dashboard in the Hub and click Publish as template — Overscore detects the live queries and offers to create the template for you. It freezes the dashboard's current deploy and source into a private listing. No copy dashboard is created, your original is never modified, and because the template serves from its own frozen files, the dashboard can stay member-only — private previews still work.

  2. Pull the template's source. The template still runs live queries, so the listing stays private until you've converted it. Run npx @overscore/cli template pull your-template-slug to get the source locally.

  3. Let Claude convert it. Open the pulled directory in your AI coding tool and paste:

    Replace every live query in this dashboard with realistic mock data exported
    from src/mockData.ts. Keep every chart, metric, and layout identical — only
    the data source changes. Scrub any real company names or identifying numbers.
    
  4. Push it back. Review the result, then run npx @overscore/cli template push your-template-slug. This replaces the template's frozen preview and source directly — no deploy, and your dashboard's own files are untouched.

  5. Publish. On your dashboard page, click Update listing, confirm the mock-data attestation, and set the visibility to Public.

Until you confirm the attestation, the listing can't go public or unlisted — an unconverted template can't leak real data by accident. The same checklist appears on the private listing's page to walk you through these steps.

Updating a listing

Once published, the Publish as template button in your dashboard header becomes Update listing. From there you can:

  • Edit the listing — title, description, category, tags, data requirements, thumbnail. Metadata edits never reset your install or star counts.
  • Refresh template to the latest deploy — check this box to re-snapshot the template from your dashboard's current deploy. Until you do, the marketplace keeps serving the frozen version, so you can iterate on your dashboard without touching the listing.

Templates created through the convert-and-push flow update their files with npx @overscore/cli template push your-template-slug instead of the refresh checkbox — their frozen preview and source are independent of your dashboard's deploys.

How people get your template

Three paths, all shown on the template's page:

# Pull the source into a directory
npx @overscore/cli template pull your-template-slug

# Scaffold a new project from the template
npx create-overscore --template your-template-slug

And on the web: Use this template forks the dashboard straight into one of their Overscore projects — built app and source included — ready to deploy and rewire to their data.

Getting credit

By default, templates publish anonymously as "Community." To put your name on your work:

  1. Make your profile public at Settings → Profile — handle, name, avatar, bio.
  2. Your templates then carry your name, linking to your portfolio at overscore.dev/u/{handle} with everything you've published.
  3. If you take on freelance or consulting work, flip on Available to work in your profile settings. The badge shows on your portfolio and next to your name on your template pages.

Unpublishing

Open your template's marketplace page — as the creator you'll see a manage section with Delete template (type the slug to confirm). This removes the listing from the marketplace for everyone and cannot be undone.

Copies that people already forked or pulled are theirs and keep working — deleting the listing never reaches into anyone else's project.

Next Steps