Marketing landing page for Balok AI — an AI-powered productivity workspace focused on deep work, team workflows, and tool integrations, delivered as a fast, maintainable single page.
Live: balok.akwancakra.my.id
| Aspect | Detail |
|---|---|
| Type | Single-page marketing site (frontend-only; no backend API in this repo) |
| Entry | src/routes/+page.svelte |
| Global layout | src/routes/+layout.svelte |
| Static assets | static/ → served from site root (/images/...) |
| Inactive archive | code.html, src/lib/content/landing.html |
- Responsive navbar: transparent at top, glass blur on scroll, hide on scroll down / show on scroll up, mobile menu
- Hero with ray-light visual, gradient headline, dual CTAs (Start Free / View Demo)
- Reveal-on-first-view animations (
reveal-once) - Count-up for headline KPI numbers
- Email CTA form with toasts (
svelte-sonner), no server persistence - Article carousel with local images under
static/images/articles - Workflow feature section with card illustrations (
static/images/components/) - Custom brand SVG icons
- Anti-drag behavior on images where applicable
- Framework: SvelteKit 2, Svelte 5
- Language: TypeScript 5
- Build: Vite 7
- Styling: Tailwind CSS v4 (
@tailwindcss/vite),tw-animate-css, tokens insrc/app.css - UI: Bits UI, shadcn-svelte-style components
- Icons: Lucide (Svelte)
- Other:
mode-watcher,svelte-sonner,tailwind-merge/clsx/tailwind-variants,layerchart(where used) - Deploy:
@sveltejs/adapter-node→node build(seeecosystem.config.cjsfor PM2 anddeploy/nginx-balok.conffor reverse proxy)
balok/
├─ deploy/ # sample nginx config
├─ docs/
├─ src/
│ ├─ lib/
│ │ ├─ actions/ # reveal-once, count-up, etc.
│ │ ├─ components/ # brand, ui (bits-ui / shadcn)
│ │ └─ sections/landing/ # main page sections
│ ├─ routes/
│ │ ├─ +layout.svelte
│ │ └─ +page.svelte
│ └─ app.css
├─ static/
│ └─ images/
│ ├─ articles/
│ ├─ components/ # workflow card illustrations
│ ├─ partners/
│ └─ balok-screenshot.png # README preview
├─ ecosystem.config.cjs # sample PM2 config
└─ README.md
Components in src/lib/sections/landing/:
BalokNavbar.svelteBalokHero.svelteBalokFeatureWorkflowSection.svelteBalokProductivityInsightsSection.svelteBalokAdoptionUsageSection.svelteBalokProductivityArticlesSection.svelteBalokFaqSection.svelteBalokCommunityCtaSection.svelteBalokFooter.svelte
- Node.js 20+
- npm 10+
git clone https://github.com/akwancakra/balok.git
cd balok
npm install
npm run devOpen http://localhost:5173.
npm run build
npm run preview| Script | Purpose |
|---|---|
npm run dev |
Vite dev server |
npm run build |
Production build |
npm run preview |
Preview production build |
npm run start |
Run Node adapter (node build) |
npm run check |
Svelte / TypeScript diagnostics |
npm run check:watch |
Diagnostics in watch mode |
- Semantic tokens live in
src/app.css(@theme inline, CSS variables). - Prefer classes such as
bg-background,text-foreground,border-border,bg-primary, etc. - Avoid legacy hardcoded colors (
background-light,surface-dark, …).
- Reveal:
src/lib/actions/reveal-once.ts+.reveal-on-loadinapp.css - Count-up:
src/lib/actions/count-up.ts - Toast: global toaster in
+layout.svelte—toast.success/toast.error
- File at
static/foo/bar.png→ URL/foo/bar.png - Articles:
static/images/articles/ - README / marketing screenshot:
static/images/balok-screenshot.png - Workflow cards:
static/images/components/
GitHub Actions workflow (.github/workflows/deploy.yml): build on push to main, then deploy to a VPS over SSH. Build uses PUBLIC_SITE_URL aligned with the production domain.
npm run check may still report:
BalokFaqSection.svelte: non-relativeindex.tsimport;collapsibleprop vs Accordion types- Warning:
chart-container.svelte(state_referenced_locally)
docs/project-initialization.mddocs/project-structure.mddocs/tech-stack.md