Project catalog where you can add yours and get interesting and practical embeds.
- Idea
- Features
- How it works
- What projects are suitable?
- Premium
- FAQ
- Tech stack
- Project structure
- Running locally
- Data Synchronization
- Contributing
- Star History
- License
While developing open source projects, one day I came up with the idea of making a website for practical pictures for projects, since I wanted to somehow highlight my project rather than adding default ones. I don't want to copy others, so I made a catalog where each project will have a relatively unique embed.
On the main page, each published project is presented as a card featuring relevant images and project information. The platform also tracks views and upvotes, which are displayed on the card as well. Visitors can:
- Search by name, description, or tag
- Filter by status (
New, added within the last 14 days) orPremium - Filter by one or more tags
- Sort by newest/oldest, most upvoted, or most viewed
Each project gets ready-made embed badges, generated as static images and available in light and dark themes:
| Embed | Light | Dark | Plan |
|---|---|---|---|
| License | ![]() |
![]() |
Free |
| Added to | ![]() |
![]() |
Free |
| Organization | ![]() |
![]() |
Premium |
Beyond the built-in badges, every project can design its own custom embed (title, description, light/dark theme) straight from the account dashboard, and copy the ready HTML snippet for a README or website.
Example:
Every project gets its own page with:
- An image carousel for screenshots
- Live GitHub stats (stars, forks, contributors, license) refreshed automatically
- Tags and social links (𝕏 (Twitter), YouTube, GitHub)
- A Markdown-powered "info" section — tables, task lists, etc. All render through the same GitHub-flavored Markdown pipeline
- A generated Open Graph image for clean link previews when the project is shared
Signed-in users can upvote a project once. Page views are also tracked as impressions, batched client-side to keep the write volume low, and both numbers are shown on the project card and its page.
New submissions land in a moderation queue. Admins can approve, reject, mark a project as premium, or edit any listing before it goes live, so the catalog stays consistent and spam-free.
- Create an account and fill info about your project.
- Optionally add social links, and one or more embed variations.
- Send it for review from your account, with an optional note for the moderators.
- Once approved, your project is published, gets its own page, and its embeds become available to copy.
- Keep an eye on impressions and upvotes as more people discover it.
- Open source
- Service
- Web app
- Developer tool
- Package
- Other technical projects
Commercial projects are also taken into work.
Essentially, we are not focused on creating an audience on the platform, although this is also important. The idea is to work on a project periodically, like an ant working on its visibility. The platform accepts a certain number of premium projects per month, and the project team will simply add them to relevant articles and create content about them on other platforms. For example, tweets, etc.
This flow allows us to work on projects as efficiently as possible. Also, if we move on to the next month, the number of projects will allow us to work on previous months' projects.
Is listing a project free?
Yes. Free listings get a project page, the base embed badges, and a custom embed you design yourself. Premium is optional and adds promotion and extra embeds.What happens after I submit a project?
It goes into a moderation queue as a draft. An admin reviews it and either publishes, rejects, or asks for changes before it's shown in the catalog.Can I edit a project after it's published?
Yes, from your account you can update details, images, embeds, and the Markdown info section at any time (in development).| Layer | Stack |
|---|---|
| Framework | Next.js 16 (App Router, static export) |
| Language | TypeScript |
| Styling | Tailwind CSS v4, ShadCN-based UI components |
| Markdown | react-markdown + remark-gfm |
| Backend | Supabase (Postgres, Auth, Storage) |
| Icons | Lucide |
app Routes (App Router): catalog, project pages, account, submit, embeds
components Shared UI and feature components (cards, forms, embeds, markdown, etc.)
lib Supabase clients, data mappers, and utilities
scripts Build-time embed image generation and the GitHub stats sync job
public Static assets, including the site logo and preview image
| Requirement | Version |
|---|---|
| Node.js | 20+ |
| npm | 10+ |
| Supabase project | with the projects, project_embeds, project_upvotes, and project_bookmarks tables set up |
# Clone the repository
git clone https://github.com/EmbedCatalog/embedcatalog.git
cd embedcatalog
# Install dependencies
npm install
# Configure environment variables
cp .env.example .env.local # create it if it doesn't exist yet, see below
# Start the dev server
npm run startOpen http://localhost:3000 to view the app.
| Variable | Used by | Purpose |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
App, scripts | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
App | Public client for auth and data access |
SUPABASE_SERVICE_ROLE_KEY |
sync-github-stats |
Server-side updates to GitHub stats |
GITHUB_TOKEN |
sync-github-stats |
Reads stars/forks/contributors from GitHub API |
| Script | What it does |
|---|---|
npm run start |
Runs the app in development mode |
npm run build |
Builds the static export and pre-renders embed PNGs |
npm run prod |
Alias for build, used in production deploys |
npm run lint |
Runs ESLint |
npm run format |
Formats the codebase with Prettier |
npm run typecheck |
Runs the TypeScript compiler in --noEmit mode |
A scheduled GitHub Action runs scripts/sync-github-stats.ts daily to refresh each project's stars, forks, contributors, and license straight from the GitHub API, so project pages stay up to date without manual work.
We have a Contributing Guide that describes the main steps for contributing to the project.
The platform is open to your ideas and code! Thanks to everyone who helps make it better.
Source code released under the AGPL-3.0 license.










