Commit Graph
90 Commits
Author SHA1 Message Date
tiennm99 eae345ecbb chore: remove Next.js and repoint CI at the SvelteKit layout
sync-data.yml now writes static/champions.json. This is the edit that had to
land with the deletion of public/: the workflow reports success regardless of
which path it writes, so a miss would have left the weekly sync green while
the live game 404'd on data load.

deploy.yml publishes build/ and passes BASE_PATH. Adds ci.yml, which runs
test, lint, and build on pull_request and pushes to main -- the repo had no
PR-triggered workflow before, so 'green before merge' was previously
unenforceable.

Deletes app/, components/, lib/, public/, next.config.mjs and
postcss.config.mjs, drops the Next and React dependencies, and swaps ESLint
onto eslint-plugin-svelte. sharp and unrs-resolver left pnpm's allowBuilds
because both arrived with Next and pnpm why now reports no dependents.
2026-07-25 11:18:58 +07:00
tiennm99 5f6b8b76c6 feat: rewrite components in Svelte 5 runes
Port all six React components. State becomes $state, memos become $derived,
and the gameRef mirror that existed only to dodge a stale closure is gone --
runes read current values at call time, so one $state holds the game.

Initialization moves to onMount rather than $effect: the page is prerendered,
so loadChampions and localStorage must be browser-only, and onMount encodes
that structurally instead of relying on the effect body happening to read no
reactive state.

champion-search becomes a real combobox/listbox: input carries the combobox
role with aria-expanded and aria-activedescendant, options are list items
wrapping buttons, and Escape closes the dropdown. Visual output is unchanged.

next/image becomes plain img -- every usage already passed unoptimized.
2026-07-25 11:14:35 +07:00
tiennm99 078d80c962 refactor: port lib layer to src/lib
classic-mode.js moves byte-for-byte. champion-data.js swaps the Next.js
env-var fetch prefix for asset() from $app/paths, which resolves to
/champions.json in dev and /loldle/champions.json in the deployed build.
getChampionImageUrl keeps returning an absolute Data Dragon URL, unwrapped.

Drops three exports with no callers: getAllChampions, getChampionByName,
getGuessedNames.

The characterization suite passes unchanged against the new location -- only
import specifiers moved, no assertions touched.
2026-07-25 11:01:40 +07:00
tiennm99 e2ae34a8ab build: scaffold SvelteKit alongside the Next.js app
Add svelte.config.js (adapter-static, BASE_PATH-driven base), vite.config.js
(Tailwind v4 Vite plugin ahead of sveltekit), the src/ shell, and static/
holding a copy of champions.json plus .nojekyll.

Declares "type": "module" so Vite can load the .js config files; Next.js was
only unaffected because all its configs use .mjs. jsconfig keeps the @/* alias
so pnpm next:build stays runnable for side-by-side comparison during the port.

Next.js scripts move to next:* and both toolchains build from this commit.
2026-07-25 11:00:14 +07:00
tiennm99 d0c75e84b1 test: add characterization tests for lib layer
Cover classic-mode comparison rules, game-engine state machine and
localStorage persistence, and champion-data search/seeding/loading with
Vitest. Storage keys are asserted literally so returning players' saved
games and stats cannot silently break.

Node environment with a hand-rolled localStorage stub; fixtures are four
hand-written champions so the weekly data sync cannot destabilise the
suite.
2026-07-25 10:54:36 +07:00
tiennm99 4b8bda7a1d ci: pull champions data on Thursdays after upstream scrape
loldle-data scrapes Thursday 06:00 UTC but GitHub queues it 2-4h late, so pull at 12:00 UTC the same day instead of the following Monday.
2026-07-25 10:07:28 +07:00
github-actions[bot] 12db0f3f87 chore(data): sync champions from loldle-data@b62f4f6 2026-07-25 02:52:26 +00:00
tiennm99 d2bf2a39a2 ci: pull champions data from loldle-data weekly
Replaces the upstream push-based fan-out with a scheduled pull, so this repo owns its own data refresh. Deploy is dispatched explicitly because a GITHUB_TOKEN push does not trigger workflows.
2026-07-25 09:52:11 +07:00
tiennm99 47389c7255 build(deps): update dependencies and patch advisories
- bump actions/checkout to v7 and actions/setup-node to v7
- bump next to 16.2.10, react and react-dom to 19.2.7
- bump eslint-config-next to 16.2.10, tailwindcss and
  @tailwindcss/postcss to 4.3.3, eslint to 9.39.5
- override @babel/core, js-yaml, and postcss to patched versions
- move pnpm build allowlist to pnpm-workspace.yaml
2026-07-17 17:57:20 +07:00
github-actions[bot] 21ddca927c chore(data): sync champions from loldle-data@1989d5f 2026-06-25 08:52:48 +00:00
github-actions[bot] 5b313a44cf chore(data): sync champions from loldle-data@0d025b4 2026-06-18 10:13:43 +00:00
github-actions[bot] 8d2121990c chore(data): sync champions from loldle-data@ddd6924 2026-06-11 10:15:04 +00:00
github-actions[bot] 5b4b40a8d4 chore(data): sync champions from loldle-data@cfab4ec 2026-05-28 09:53:12 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
36dacb8e96 build(deps): bump the minor-and-patch group with 4 updates (#10)
Bumps the minor-and-patch group with 4 updates: [next](https://github.com/vercel/next.js), [react](https://github.com/facebook/react/tree/HEAD/packages/react), [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) and [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next).


Updates `next` from 16.2.3 to 16.2.6
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.2.3...v16.2.6)

Updates `react` from 19.2.4 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react)

Updates `react-dom` from 19.2.4 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react-dom)

Updates `eslint-config-next` from 16.2.2 to 16.2.6
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.6/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: react
  dependency-version: 19.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: react-dom
  dependency-version: 19.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: eslint-config-next
  dependency-version: 16.2.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:02:31 +07:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
7829633013 build(deps): bump pnpm/action-setup from 4 to 6 (#9)
Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 4 to 6.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/v4...v6)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:02:26 +07:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ab9eec0dd9 build(deps): bump actions/setup-node from 4 to 6 (#8)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:02:19 +07:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
af3c921d32 build(deps): bump actions/upload-pages-artifact from 3 to 5 (#7)
Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 3 to 5.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v3...v5)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:02:13 +07:00
dependabot[bot]andGitHub be5ecdb98c build(deps): bump actions/checkout from 4 to 6 (#6)
Squash merge: actions/checkout v4->v6
2026-05-23 18:02:06 +07:00
dependabot[bot]andGitHub a4e61713f8 build(deps): bump actions/deploy-pages from 4 to 5 (#5)
Squash merge: actions/deploy-pages v4->v5
2026-05-23 18:02:01 +07:00
tiennm99andGitHub 00576bfa32 chore: add dependabot config (#4) 2026-05-23 10:48:39 +07:00
github-actions[bot] 7c3268d3a8 chore(data): sync champions from loldle-data@07c2e48 2026-05-21 09:30:30 +00:00
github-actions[bot] 4ac9ccbd2c chore(data): sync champions from loldle-data@df64f11 2026-05-14 08:32:09 +00:00
tiennm99 423fbf63fa chore(ci): bump node to 24 2026-05-13 10:52:26 +07:00
tiennm99 408eee818a fix(ci): skip build scripts to avoid pnpm 11 ERR_PNPM_IGNORED_BUILDS 2026-05-13 10:31:03 +07:00
tiennm99 dba51c19e7 fix(ci): bump node to 22 for pnpm 11 compatibility 2026-05-13 10:29:48 +07:00
tiennm99 750d825e01 fix(ci): migrate workflow from npm to pnpm 2026-05-13 10:28:40 +07:00
tiennm99 bb8ae531b6 Merge remote-tracking branch 'origin/main' 2026-05-13 10:22:10 +07:00
tiennm99 64669cae4e docs: flesh out README 2026-05-11 20:15:11 +07:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ba4b30bb7c build(deps): bump next from 16.2.2 to 16.2.3 (#1)
Bumps [next](https://github.com/vercel/next.js) from 16.2.2 to 16.2.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.2.2...v16.2.3)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.2.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 13:33:30 +07:00
github-actions[bot] a971e0d6f8 chore(data): sync champions from loldle-data@0258706 2026-04-30 08:12:34 +00:00
github-actions[bot] 0c53fd6abb chore(data): sync champions from loldle-data@7a9d4f6 2026-04-20 14:31:24 +00:00
github-actions[bot] ceae3ed5bc chore(data): sync champions from loldle-data@b01967f 2026-04-20 14:19:08 +00:00
tiennm99 40ffc980af chore: migrate from npm to pnpm 2026-05-13 10:21:09 +07:00
tiennm99andGitHub 810b5faa14 feat: show newest guess on top of the grid (#2) 2026-04-20 18:30:00 +07:00
tiennm99 407166d033 update README credits to reference loldle-data repo 2026-04-06 11:04:02 +07:00
github-actions[bot] a5f223d6bc chore: update champions.json from loldle-data 2026-04-05 05:18:02 +00:00
tiennm99 9b32b8889c fix: use local date for daily seed instead of UTC
toISOString() returned UTC date, causing the daily game to reset at
UTC midnight rather than local midnight. Users in UTC+ timezones
would see yesterday's completed game until the UTC date rolled over.
2026-04-05 01:14:37 +07:00
tiennm99 31d7127396 feat: clear expired daily game cache from localStorage on app load 2026-04-05 00:55:15 +07:00
tiennm99 e502d43a9c add chrome-dev-tools to gitignore 2026-04-05 00:55:10 +07:00
github-actions[bot] ea8e1f1300 chore: update champions.json from loldle-data 2026-04-04 17:39:57 +00:00
github-actions[bot] 10de5657aa chore: update champions.json from loldle-data 2026-04-04 13:31:22 +00:00
github-actions[bot] ced056fd1b chore: update champions.json from loldle-data 2026-04-04 11:41:57 +00:00
tiennm99 bc5a0784b3 fix: derive basePath from repository name in CI workflow 2026-04-04 12:26:56 +07:00
tiennm99 a130dd191b fix: make basePath configurable via NEXT_PUBLIC_BASE_PATH env var
Enables platform-agnostic deployment — GitHub Pages sets the env var
in CI, while Vercel/Netlify/local dev default to root path.
2026-04-04 12:24:39 +07:00
tiennm99 dc7603459f fix: set basePath for GitHub Pages deployment
Assets and routes now correctly resolve under /loldle subdirectory.
2026-04-04 12:23:16 +07:00
tiennm99 f298ddddc2 ci: add GitHub Pages deployment workflow
- Configure Next.js static export (output: "export")
- Add GitHub Actions workflow to build and deploy on push to main
2026-04-04 11:55:29 +07:00
tiennm99 d9ae9c97d2 refactor: migrate from vanilla JS to Next.js 16 with Tailwind CSS
- Replace vanilla HTML/CSS/JS with Next.js App Router + React components
- Game logic (champion-data, game-engine, classic-mode) moved to lib/
- UI split into modular components (game-board, champion-search, guess-grid, etc.)
- Add Tailwind CSS v4 with CSS variables for theming
- Immutable state updates, fetch deduplication, next/image for CDN images
- champions.json moved from assets/ to public/
2026-04-04 11:52:59 +07:00
tiennm99 9572f39f59 feat: implement LoLdle Classic mode with daily and unlimited play
Vanilla JS web game with modular architecture:
- data-loader: champion data fetching, seeded random selection
- game-engine: mode-agnostic state machine with localStorage persistence
- classic-mode: 7-attribute comparison logic (gender, genre, range, resource, region, lane, year)
- ui-renderer: search autocomplete, colored feedback grid, stats display
- Dark theme responsive UI with Data Dragon CDN champion images
2026-04-04 11:17:47 +07:00
tiennm99 d8d7d8e721 feat: add champions data asset 2026-04-04 10:42:57 +07:00
tiennm99andGitHub 1e1146b386 Initial commit 2026-04-04 10:41:37 +07:00