Commit Graph
23 Commits
Author SHA1 Message Date
asepharyana 02b4437eb3 fix: stop dependabot auto-merge from landing breaking majors
Root causes (this round):
- dependabot.yml had been overwritten to a minimal version with NO
  ignore rules -> major bumps allowed (typescript 7, eslint 10, tsparticles 4)
- main branch had NO branch protection -> 'gh pr merge --auto' merged
  even with failing CI
- auto-merge workflow had no check-run verification step

Fixes:
- Branch protection on main: required status check 'lint + typecheck +
  test + build' (strict) so auto-merge cannot land failing changes
- dependabot-auto-merge.yml: verify CI check-run conclusion == success
  (actions/github-script poll with timeout) before enabling auto-merge
- dependabot.yml: restore ignore rules for eslint/typescript/@tsparticles
  majors + eslint-config-next + eslint-plugin-react
- Rollback toolchain to known-good exact pins:
  typescript 6.0.3, eslint 9.39.5, @tsparticles/{react,engine,slim} 3.x
  (exact versions, no ranges dependabot can widen)
- Close dependabot PR #19 (tsparticles 4.4.0)
2026-09-21 11:03:34 +07:00
asepharyana 6f4a021785 fix: lock toolchain against dependabot major bumps (eslint <10, tsparticles ~3.9)
CI after the overlay fix exposed two regressions from dependabot
auto-merges:
- eslint back to ^10 (crashes eslint-plugin-react: display-name
  getFilename) -> >=9.24.0 <10 (9.0/9.20 lack eslint/config export)
- @tsparticles/engine+slim to ^4 (v4 API drift breaks sparkles.tsx),
  and mixing ^3.0 with slim's nested 3.9.1 broke Engine type identity
  -> all pinned ~3.9.0 so bun hoists a single engine copy

Verified locally: lint/typecheck/test/build/format all green.
2026-09-20 22:54:10 +07:00
asepharyana 142a814039 fix: pin eslint to ^9 — dependabot re-landed v10 which crashes eslint-plugin-react
CI revealed eslint had been bumped to ^10 again (react/display-name:
contextOrFilename.getFilename is not a function). Restore ^9 pin so the
declared toolchain matches the vendored components' validated stack.
2026-09-20 22:48:30 +07:00
asepharyana 5df8306909 fix: resolve 'full black' page — unstuck MultiStepLoader overlay, add dark-mode depth
Root cause of the all-black view: the gallery demo hardcoded
<MultiStepLoader loading /> (loading=true forever), which renders a
fixed inset-0 z-[100] backdrop-blur overlay over the entire viewport.
Replace with an interactive demo (button triggers loader, auto-resets
after 4s).

Also soften flat-black dark backgrounds:
- /ui page: dark:bg-black -> dark:bg-zinc-950 + subtle top radial gradient
- home hero: dark:bg-black -> dark:bg-zinc-950 + white 6% radial gradient
2026-09-20 22:47:12 +07:00
asepharyana 738f533d4c feat(ui): demo all vendored Aceternity components in /ui gallery
Expand the showcase from ~20 to all ~45 vendored components:
- Waves/boxes/spotlights: WavyBackground, Boxes, Spotlight, BackgroundGradient
- Text: Cover, TextGenerateEffect, TextHoverEffect, SquigglyText, TextRevealCard
- Cards/buttons: Meteors, GlareCard, MagneticButton
- Interaction: GooeyInput, Notch, FloatingDock, AnimatedModal, AnimatedTabs
- Scroll: StickyScroll, ContainerScroll, Timeline, HeroParallax, ParallaxScroll,
  MaskContainer (svg-mask), FocusCards, HoverEffect, Tooltip, MultiStepLoader
- GoogleGeminiEffect wired with 5 useTransform pathLengths from scrollYProgress
Full gate green (lint/typecheck/test/build/format) + SSR verified on /ui.
2026-09-20 22:19:37 +07:00
asepharyana 0810ff1373 fix(ci): guard dependabot auto-merge on green CI
Root cause of recurring breaking bumps: dependabot-auto-merge ran
gh pr merge --auto with no CI gate and the repo has no branch protection,
so PRs merged the moment checks finished — including FAILED ones
(eslint@10, tsparticles@4, typescript@7 all landed repeatedly).

Add a github-script step: list check-runs for the PR head, fail unless
all checks completed AND none failed. Breaking bumps now block instead
of silently landing.
2026-09-20 22:08:39 +07:00
asepharyana fb91f3df90 chore(dependabot): fix ignore patterns (exact names, no wildcard) + checkout v7
- dependabot ignore for npm does NOT support wildcards (only groups.patterns
  does). The '@tsparticles/*' rule was silently ignored -> v4 bumps kept
  landing. Replace with exact scoped names.
- bump actions/checkout v5->v7 (closes dependabot PR #5); the CI failure on
  that PR was a stale-branch format-check, not checkout v7.
Open @tsparticles PRs now closed (#9 already closed earlier).
2026-09-20 22:08:14 +07:00
asepharyana c9abfc4815 fix(deps): re-pin toolchain after auto-merge regressions (round 2)
dependabot auto-merge re-landed eslint@^10 + @tsparticles@^4 + typescript@7
(no branch protection -> breaking bumps merge even when failing). Re-pin the
known-good stack: eslint ^9, typescript ^6.0.3, tsparticles ^3. Full gate green.
2026-09-20 22:01:57 +07:00
asepharyana 40b6fd3cfc feat(home): Aceternity hero — Spotlight, SparklesCore, Cover, MagneticButton
Replace create-next-app boilerplate home with a signature Aceternity hero:
- Spotlight glow top-left, SparklesCore particle field background
- Cover underlines 'animated UI out of the box'
- MagneticButton on the gallery CTA (href=/ui)
- Staggered fade-up entry via motion/react
Full gate: lint/typecheck/build/test/format green.
2026-09-20 22:01:13 +07:00
asepharyana 978db63a95 fix(deps): re-pin toolchain after auto-merge regressions
dependabot auto-merge landed eslint@^10 + @tsparticles@^4 (d13b984 pins
ignored, no branch protection). Restore known-good stack: eslint ^9, TS ^6,
tsparticles ^3. Full gate green.
2026-09-20 21:28:14 +07:00
asepharyana dcc6fc2c0a refactor: migrate deprecated middleware convention to proxy (Next 16)
Middlewate file convention is deprecated in Next 16.3.5 (renamed to proxy).
git mv middleware.ts -> proxy.ts, rename exported fn middleware -> proxy.
Build now emits `ƒ Proxy (Middleware)` with no deprecation warning.
2026-09-20 21:27:28 +07:00
asepharyana 943126f6b3 chore(dependabot): ignore semver-major bumps that break the toolchain stack
Prevent recurrence of the breakage fixed in d13b984:
- eslint major (ESLint 10 dropped rule-context getFilename; eslint-plugin-react
  peer range caps at ^9.7) -> react/display-name crash
- typescript major (typescript-eslint 8.x peer caps <6.1.0)
- @tsparticles/* major (registry SparklesCore targets v3 API)
- eslint-config-next + eslint-plugin-react majors (framework/plugin train)

Also add github-actions ecosystem (weekly, grouped) and labels.
2026-09-20 20:54:29 +07:00
asepharyana d13b984ac4 fix(toolchain): pin eslint ^9 + typescript ^6 to unbreak dependabot-bumped stack
dependabot's eslint@^10 bump broke eslint-plugin-react 7.37.5 (peer range caps at
^9.7; eslint 10 dropped context.getFilename) -> react/display-name crash.
TS 7 in typescript-eslint peer range breaks @typescript-eslint/parser load.
Pin eslint@^9.39.5 + typescript@^6.0.3; tsparticles pinned ^3 (registry target API).
lint/typecheck/test/build/format all green.
2026-09-20 20:47:11 +07:00
asepharyana 78ed092e1c chore(deps): add registry deps for vendored showcase (mini-svg-data-uri, simplex-noise, tsparticles) 2026-09-20 20:23:36 +07:00
asepharyana 692d54bab1 fix(showcase): drop stray id prop on showcase Card (typecheck gate) 2026-09-20 19:16:01 +07:00
asepharyana bf75d9deef feat(ui): vendor Aceternity registry components + showcase gallery
Vendor 50 Aceternity UI components into components/ui from the official
registry (ui.aceternity.com/registry/<slug>.json), adapted for this
template's stack: Tailwind v4, motion/react 13, cn util, React 19.

Add a live showcase gallery (/ui + /docs/... navigation is unchanged):
app/ui/page.tsx renders <ShowcaseGallery> with 30+ demos — 3d-pin,
aurora, background-beams, bento, card-stack, card-spotlight,
direction-aware-hover, encrypted-text, evervault-card, flip-words,
hero-highlight, hero-parallax, infinite-moving-cards, moving-border,
sparkles, tracing-beam, animated-tooltip, typewriter-effect,
placeholders-and-vanish-input and friends.

Toolchain stays zero-warning: vendored animation code is scoped in
eslint.config.mjs (react-hooks/react-compiler advisory rules, no-any,
prefer-const, no-img-element) so app code keeps a 0-error gate. typecheck,
build, 7 vitest tests and 2 test suites all green.
2026-09-20 19:10:43 +07:00
asepharyana d54aa7e2c2 feat: close remaining gaps — middleware, demo wiring, error UX, env validation
CI / lint + typecheck + test + build (push) Canceled after 0s
- Auth: middleware.ts guards /protected via better-auth session cookie;
  protected page reads session server-side (auth.api.getSession)
- Demo wiring (app/demo + components/demo): react-markdown + remark-gfm +
  shiki CodeBlock, RHF+zod form with react-query mutation + sonner toast,
  react-table items list (legacy API, table v9), /api/items GET+POST
  (zod v4 coercion, schema in lib/items.ts shared with unit tests)
- Error UX: app/error.tsx (retry + digest), not-found.tsx (404), loading.tsx
- Env: lib/env.ts zod-validated (no import-time throw), .env.example sync
  (NEXT_PUBLIC_BETTER_AUTH_URL), auth-client uses env
- Tooling: @vitest/coverage-v8 (test:coverage works), tsconfig cleanup
  (drop .next/dev/dev/types artifact), README rewrite, demo e2e specs
2026-09-19 22:47:26 +07:00
asepharyana 6c6330cd7a fix: use explicit children type in RootLayout (CI typecheck)
CI / lint + typecheck + test + build (push) Canceled after 0s
LayoutProps<'/'> is a Next-generated global type that only exists after
next typegen/build creates .next/types. Fresh CI clones fail tsc --noEmit
because .next doesn't exist yet. Use Readonly<{children}> — no dependency
on generated types.
2026-09-19 21:54:31 +07:00
asepharyana e288f659c2 feat: add CI, Docker, auth, typed API client, shiki code blocks, e2e tests
CI / lint + typecheck + test + build (push) Canceled after 0s
- CI: GitHub Actions (bun 1.3.14, lint/typecheck/test/build/format gates)
- Docker: multi-stage standalone build + .dockerignore (next.config output=standalone)
- Auth: better-auth server (memory adapter, drizzle-swap-ready) + react client
  + /api/auth/[...all] route handler
- API: /api/health + /api/openapi routes, openapi-typescript codegen to
  types/api.ts, typed openapi-fetch client (lib/api, lib/http)
- Shiki: server-side CodeBlock component (escaped HTML)
- E2E: playwright home + health specs on dedicated :3100 (chromium 1243
  installed from GCS after CDN timeout)
- Dev: allow 127.0.0.1/localhost dev origins (HMR for local tooling)
2026-09-19 21:10:44 +07:00
asepharyana faebb51d90 chore: enforce zero-warning toolchain
- Enable noUnusedLocals/noUnusedParameters in tsconfig (unused code = error)
- Remove unused React import in scroll-area (caught by strict unused checks)
- Pin NODE_ENV=development for dev script (box shell leaks NODE_ENV=production,
  which made next dev emit a non-standard-env warning)
2026-09-19 19:28:33 +07:00
asepharyana 8093dd2b7f feat: setup full Next.js toolchain and core dependencies
- Add runtime deps: react-query, react-hook-form+zod, zustand, ky, openapi-fetch,
  better-auth, react-markdown, shiki, recharts, next-themes, nuqs, sonner, cmdk,
  vaul, embla-carousel-react, motion, date-fns, tailwind-merge, clsx, cva
- Add dev tooling: vitest, testing-library, playwright, prettier(+tailwind plugin),
  husky, lint-staged, jsdom
- Wire providers (QueryClient, Theme, NuqsAdapter, Tooltip, Sonner) into layout
- Add vitest/playwright/prettier configs + lint-staged pre-commit hook
- Add lib/query-client + lib/http (ky) helpers and sample unit test
- Fix react-hooks/set-state-in-effect lint errors (use-mobile useSyncExternalStore,
  carousel async init)
- Remove committed Next-generated types/ duplicates (regenerated under .next/types)
2026-09-19 19:24:48 +07:00
asepharyana 046f201e63 feat: initialize Next.js project with TypeScript, ESLint, and Tailwind CSS
- Added ESLint configuration for Next.js with custom global ignores.
- Created Next.js configuration file with basic setup.
- Initialized package.json with dependencies for Next.js, React, and TypeScript.
- Set up PostCSS configuration for Tailwind CSS.
- Added SVG assets for the project.
- Created TypeScript configuration file with strict settings and Next.js support.
- Defined custom type declarations for Next.js cache life and routing parameters.
- Implemented validation types for Next.js pages and layouts.
2026-09-19 18:34:05 +07:00
asepharyana d68806b2f2 first commit 2026-09-19 18:09:42 +07:00