Commit Graph
52 Commits
Author SHA1 Message Date
dependabot[bot] ada8bb1639 build(deps-dev): bump eslint from 9.39.5 to 10.8.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.39.5 to 10.8.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.5...v10.8.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.8.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-25 04:23:02 +00:00
tiennm99 31988fb8ce Merge pull request #24 from tiennm99/feat/sveltekit
Migrate from Next.js to SvelteKit
2026-07-25 11:20:42 +07:00
tiennm99 b7612c7f64 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 bb4e8ea9b4 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 f253dfb4b0 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 2990fcc152 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 f2819ead6d 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 673f7b42dc 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] 93df4fa208 chore(data): sync champions from loldle-data@b62f4f6 2026-07-25 02:52:26 +00:00
tiennm99 8279b16f9a 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 d8ba341773 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] bd8e03d577 chore(data): sync champions from loldle-data@1989d5f 2026-06-25 08:52:48 +00:00
github-actions[bot] 3029d5bbf6 chore(data): sync champions from loldle-data@0d025b4 2026-06-18 10:13:43 +00:00
github-actions[bot] 29e59208ec chore(data): sync champions from loldle-data@ddd6924 2026-06-11 10:15:04 +00:00
github-actions[bot] b8e0115fa8 chore(data): sync champions from loldle-data@cfab4ec 2026-05-28 09:53:12 +00:00
dependabot[bot] 54f2f5ac30 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] 1112f7e5f0 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] 65b00e86a9 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] 041cac4fc0 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] 323b18a3cd 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] f5f7f03f07 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
tiennm99 0716df6d32 chore: add dependabot config (#4) 2026-05-23 10:48:39 +07:00
github-actions[bot] 9460eca1da chore(data): sync champions from loldle-data@07c2e48 2026-05-21 09:30:30 +00:00
github-actions[bot] 72045362ae chore(data): sync champions from loldle-data@df64f11 2026-05-14 08:32:09 +00:00
tiennm99 aa3365f07b chore(ci): bump node to 24 2026-05-13 10:52:26 +07:00
tiennm99 bf6946ac65 fix(ci): skip build scripts to avoid pnpm 11 ERR_PNPM_IGNORED_BUILDS 2026-05-13 10:31:03 +07:00
tiennm99 3cc59be0d9 fix(ci): bump node to 22 for pnpm 11 compatibility 2026-05-13 10:29:48 +07:00
tiennm99 b018aae4c9 fix(ci): migrate workflow from npm to pnpm 2026-05-13 10:28:40 +07:00
tiennm99 3d945709d2 Merge remote-tracking branch 'origin/main' 2026-05-13 10:22:10 +07:00
tiennm99 bde6c58224 chore: migrate from npm to pnpm 2026-05-13 10:21:09 +07:00
tiennm99 21606ac595 docs: flesh out README 2026-05-11 20:15:11 +07:00
dependabot[bot] d7bed48d10 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] 03862fa55e chore(data): sync champions from loldle-data@0258706 2026-04-30 08:12:34 +00:00
github-actions[bot] 3c1e9323b7 chore(data): sync champions from loldle-data@7a9d4f6 2026-04-20 14:31:24 +00:00
github-actions[bot] 819c53885b chore(data): sync champions from loldle-data@b01967f 2026-04-20 14:19:08 +00:00
tiennm99 f77d3207b6 feat: show newest guess on top of the grid (#2) 2026-04-20 18:30:00 +07:00
tiennm99 6c55a39190 update README credits to reference loldle-data repo 2026-04-06 11:04:02 +07:00
github-actions[bot] 1f61c3fddb chore: update champions.json from loldle-data 2026-04-05 05:18:02 +00:00
tiennm99 29452c9cc6 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 be995c4282 feat: clear expired daily game cache from localStorage on app load 2026-04-05 00:55:15 +07:00
tiennm99 4128be36b7 add chrome-dev-tools to gitignore 2026-04-05 00:55:10 +07:00
github-actions[bot] 3bd4a006a5 chore: update champions.json from loldle-data 2026-04-04 17:39:57 +00:00
github-actions[bot] 82b019a1e5 chore: update champions.json from loldle-data 2026-04-04 13:31:22 +00:00
github-actions[bot] a813d03587 chore: update champions.json from loldle-data 2026-04-04 11:41:57 +00:00
tiennm99 3cfacb94f2 fix: derive basePath from repository name in CI workflow 2026-04-04 12:26:56 +07:00
tiennm99 52d6b03c23 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 8e739f1be2 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 efbecedd91 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 daf4d60bb2 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 03317b9340 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