| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A modular, high-performance Bento-style link-in-bio, built with SvelteKit + Svelte 5 + Tailwind CSS 4. Profile on the left, an advanced masonry board of cards on the right — inspired by Bento.me (now part of Linktry) and a SvelteKit port of my React version, bento-me.
🥈 Second-place winner on the EDTeam platform — a contest featuring 50+ developers from the LATAM community to build the best Linktree clone in React. This SvelteKit version is the evolution of that award-winning project. See the original challenge →
| Area | Choice |
|---|---|
| Framework | SvelteKit 2, Svelte 5 (runes) |
| Language | TypeScript (strict) |
| Styling | Tailwind CSS 4 + CSS custom properties |
| Build | Vite |
| Tooling | ESLint, Prettier, svelte-check |
| Deploy | @sveltejs/adapter-auto (Vercel / Netlify / Node) |
Requires Node.js 18+.
# install dependencies
npm install
# start the dev server (add --open to launch the browser)
npm run dev
# type-check · lint · format
npm run check
npm run lint
npm run format
# production build + local preview
npm run build
npm run previewsrc/
├─ lib/
│ ├─ types.ts # Domain contract (data ≠ rendering)
│ ├─ config.ts # Site config: canonical URL, handles, repo URL
│ ├─ seo.ts # buildSeo(content) → meta + JSON-LD graph
│ ├─ theme.svelte.ts # Global light/dark state (rune class)
│ ├─ data/ # ← single source of truth
│ │ ├─ profile.ts # left column
│ │ ├─ sections.ts # cards (social · work · projects)
│ │ └─ index.ts
│ ├─ actions/reveal.ts # Shared IntersectionObserver reveal action
│ ├─ utils/ # cn · formatCount
│ └─ components/
│ ├─ Seo.svelte
│ ├─ icons/ # Icon.svelte + inline SVG registry
│ ├─ profile/ # ProfilePanel · Avatar · ProfileDetail · buttons
│ ├─ cards/ # CardRenderer → LinkCard · YoutubeEmbedCard · …
│ └─ bento/ # BentoBoard → Section → Masonry
├─ routes/
│ ├─ +page.svelte # Composition: profile (left) + masonry (right)
│ ├─ +page.ts # export const prerender = true
│ ├─ layout.css # Design tokens + card/reveal primitives
│ └─ sitemap.xml/+server.ts # Prerendered sitemap
└─ static/ # profile.webp, card images, robots.txtEverything renders from one typed object, so data and presentation stay fully decoupled:
content (AppContent)
├─ profile → ProfilePanel (left, sticky on desktop)
└─ sections → BentoBoard
└─ Section → Masonry → CardRenderer → LinkCard / YoutubeEmbedCardCardRenderer is the single dispatch point that switches on card.type — adding a new kind of card means one new branch plus one component, nothing else.
Drop an object into the relevant section in src/lib/data/sections.ts:
{
id: 'my-project',
type: 'link',
platform: 'My Project',
username: 'my-project.com',
url: 'https://my-project.com',
icon: 'portfolio', // key from the icon registry
title: 'My Project',
subtitle: 'One punchy line about it.',
images: ['/images/projects/my-project.webp'],
singleImageMode: true,
actionLabel: 'Open project',
style: { accent: '#6366f1' } // drives badge, CTA and hover glow
}Register inline SVG markup in src/lib/components/icons/icons.ts (stroke: true for lucide-style glyphs, omit it for filled brand marks) and add the key to CardIconKey in src/lib/types.ts.
All colors are CSS custom properties in src/routes/layout.css, defined per [data-theme] — change them in one place for both light and dark.
buildSeo(content) derives all metadata from the same data that renders the page, so it can never drift out of sync:
After deploying, set your production domain in src/lib/config.ts (site.url) — canonical URLs, Open Graph and the sitemap all derive from it.
The project uses @sveltejs/adapter-auto, which detects Vercel, Netlify, Cloudflare and others automatically. For a specific target, swap in the matching adapter.
| Command | Description |
|---|---|
| npm run dev | Start the Vite dev server |
| npm run build | Create a production build |
| npm run preview | Preview the production build locally |
| npm run check | Type-check with svelte-check |
| npm run lint | Run Prettier (check) + ESLint |
| npm run format | Format the codebase with Prettier |
This project is licensed under the MIT License.
Inspired by Bento.me (acquired by Linktry) and ported from my React implementation, bento-me.
| Back | FazBrowse Home | New Git URL |