Ramble
가치 있는 활동을 위한 마켓플레이스
Gamefound에서 Nemesis Legacy 약정 및 추가 옵션을 배송·부가세·통화까지 포함해 가장 저렴한 조합을 찾아줍니다
Find the cheapest combination of Nemesis Legacy pledges and add-ons on Gamefound for exactly what you want — with shipping, VAT and currency.
커머스TypeScript · VueGitHub @SlyDave온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Finds the cheapest combination of Nemesis Legacy pledges and add-ons on Gamefound for exactly what you want.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Works out the cheapest way to back Nemesis Legacy on Gamefound for exactly what you want.
Switch on the games and extras you are after and it finds the best combination of pledges, bundles and single add-ons — including a bigger bundle with things you did not ask for, when that is still the cheaper way to get what you did. It then prices the order with shipping, VAT and your currency, and lists what to put in your Gamefound cart, with pictures.
An unofficial fan-made tool. Not affiliated with, or endorsed by, Awaken Realms or Gamefound.
What has changed, and when, is in CHANGELOG.md; the site's own "What's New?" list is the short version of it.
It is a static site: every page is rendered to HTML at build time, and all the working-out happens in the browser. There is no server.
| Part | Where |
|---|---|
| The catalogue, as captured | data/gamefound.json |
| The catalogue, as shipped, and images | app/data/catalog.json, public/images/products/ |
| What each product is (which switch) | app/domain/classification.ts |
| What the switches and single picks ask for | app/domain/selection.ts |
| The shipping table | app/domain/shipping.ts |
| The currencies and their symbols | app/domain/currencies.ts |
| Retail prices, and inflation since | app/domain/msrp.ts, app/domain/inflation.ts |
| Destinations and tax rates | app/domain/destinations.ts |
| The search for the best combination | app/domain/solver.ts |
| Turning a combination into a full quote | app/domain/quote.ts |
| The page | app/pages/index.vue, app/components/ |
| The "What's New?" list | app/domain/changes.ts |
| The four themes, one per game | app/assets/css/main.css, app/composables/useTheme.ts |
Choosing what to buy is a weighted set-cover problem: each switch stands for some items, each
product on sale provides some items at a price, and the cheapest set of products providing
everything is wanted. solver.ts solves it exactly. It decides one bundle at a time (the best
answer either includes it or does not), and after each decision splits what is left into
groups of bundles that no longer overlap, which fall apart into one small problem per game. It
takes about a millisecond, so it simply runs again on every change.
The tests check it against a brute-force search over random combinations of the switches.
Combinations are ranked on the price of the rewards. Shipping is added afterwards and is not part of the ranking, because the campaign only publishes shipping for pledges — add-on shipping “will be calculated in pledge manager” — so counting it would wrongly favour buying everything separately.
There is no server, no accounts and no cookies. Visits are counted with Cloudflare Web Analytics, which keeps nothing in the browser, and nothing else is collected. The one secret, the Font Awesome token, never reaches the repository or the built site. SECURITY.md has the detail and how to report a problem.
Needs Bun.
bun install
bun run dev
| Command | What it does |
|---|---|
bun run dev | Development server |
bun run build | The static site, into .output/public |
bun run preview | Serves the built site |
bun run check | Lint, formatting, types and tests — what CI runs |
bun run catalog:build | Rebuilds the shipped catalogue and images from capture |
bun run icons:generate | Rebuilds the icon collection |
TypeScript, ESLint and Prettier are all set as strict as they go (nuxt.config.ts,
eslint.config.mjs, .prettierrc.json), and CI fails on a single warning.
Nuxt is held at 4.5 (~4.5.2 in package.json). 4.6.0 failed to render any page on Windows
when this was set up — “Either manifest or precomputed data must be provided”, in both
dev and build — so try a newer version deliberately rather than by accident.
The icons are Font Awesome Pro, which needs a licence token to install. Copy .env.example to
.env and put your
package token in it, then run bun install.
Without a token the Pro packages are skipped and the icons are drawn from Font Awesome Free instead, so the project still installs, builds and passes CI — it just looks a little heavier. The generated icon files are never committed: this repository is public, and the Pro icons are licensed, not open.
For GitHub Actions, add the token as a repository secret named FONTAWESOME_PACKAGE_TOKEN.
Gamefound sits behind bot protection that turns scripts away, so the catalogue is captured from a real browser session rather than scraped from the command line:
scripts/capture-gamefound.js into the browser console. It downloads gamefound.json.data/gamefound.json, then:bun run catalog:build
bun test
The tests fail if Gamefound has added a product that app/domain/classification.ts does not
know about yet — classify it there. If the shipping table on the project page has changed,
update app/domain/shipping.ts to match.
git diff data/gamefound.json shows exactly what Gamefound changed. A picture that is already
stored is kept, so where a product's image has changed, delete its file in
public/images/products/ before building — or fetch them all again:
bun run catalog:build --force
The site is at nemesis.slydave.com.
Pushing to main builds it and publishes it to GitHub Pages
(.github/workflows/deploy.yml). The repository's Pages source is set to GitHub Actions,
with nemesis.slydave.com as its custom domain; the domain's DNS has a CNAME record
pointing at slydave.github.io.