Cookies on Acheev

We use cookies and similar technologies for the things below. You can accept all, reject everything except what's essential, or pick what you're OK with.

Improvement
Anonymous usage measurement so we can fix bugs and prioritise work.

Read our cookies policy and the privacy policy.

Loading…

Changelog

Listed below are the key changes in each update release, the newest release is listed first:

v0.33.0 - 2026-06-25

Added

  • A global find-as-you-type search in the top bar. One search box covers every game (not just those with guides) plus achievements, with a live results dropdown as you type. It replaces the separate per-page search boxes on the games, guides, my-games and home pages.
  • Game guide pages now emit schema.org HowTo structured data ("How to 100% ") with each achievement as a step, alongside the existing VideoGame and BreadcrumbList markup.
  • A site footer with browse, help and legal links, giving every page a consistent set of secondary navigation.

Changed

  • Sitemap entries are now weighted by guide completeness - finished guides get a higher priority (0.8) than in-progress (0.6) or barely-started (0.5) ones, rather than a flat 0.6 for every game.
  • The "All games" page now reaches the whole catalogue. It still opens on the curated guided games (the "Started or done" filter, selected by default in the dropdown), but choosing "Any" in the guide-status filter now lists every game - the same set the new top-bar search finds, rather than only games that already had achievements synced. The separate "Achievement guides" page has been folded into it; old /guides links now redirect to /games.

Fixed

  • Legacy tabbed game URLs from the old site (such as /game//overview/, and siblings like /roadmap) now 301-redirect to the game's canonical page instead of returning a 500. Crawlers still hit these stale URLs; a non-numeric sku segment used to fail an integer parse and error out.
  • robots.txt now points crawlers at the sitemap with a Sitemap directive (https://acheev.net/sitemap.xml) and collapses the two separate user-agent groups into one well-formed group, where before it had no Sitemap directive.
  • A game or sku page for a record that no longer exists now returns a clean 404 instead of a 500. Crawlers and old/stale links hitting removed games previously got a 500, which wastes crawl budget and looks like instability.
  • Achievement icons now carry descriptive alt text (the achievement name) instead of an empty alt, improving image-search visibility and screen-reader accessibility.
  • Non-production instances (dev, staging, previews, and any geo/preview mirror on another host) now serve "noindex, nofollow" on every page, so they can never be indexed or compete with production for the same content. Canonical URLs were already host-independent (built from the configured app URL).
  • The web font now loads on the live site. It was referenced at the domain root but served only on the app origin, so when the stylesheet loads from the assets subdomain the browser fetched the font cross-origin and was blocked (no CORS header, and the root path is not proxied). The font now lives under the proxied /assets path and static assets send Access-Control-Allow-Origin.
  • The achievement search on a game page no longer loses focus (and caret position) each time the results reload as you type.

v0.32.0 - 2026-06-25

Added

  • A new Admin console at /manage for admin and superadmin users. It provides user administration (search, status filtering, and account-lifecycle actions such as activate and schedule-removal), a site-wide activity/audit log built on twad events, and background-job execution history with live status, payload and log inspection, and one-click retry of failed jobs. It is gated separately from the existing developer dashboard at /admin.

Changed

  • Unlocked achievements on a signed-in game page now get a clear "done" treatment - a green-tinted card with a success ring, a ringed icon with a corner check, and an "Unlocked" badge - instead of just a dim, low-contrast row.

Fixed

  • Saving an achievement edit no longer leaves the form open with duplicated "Edit collectibles/resources" buttons. The whole editor is now one swap unit keyed on the row id, and a successful save collapses it back to the read view (like Cancel).
  • An achievement saved with an empty guide no longer renders an empty, styled guide paragraph. Quill stores "" for a blank editor; that is now treated as no content (both on save and when displaying).

v0.31.1 - 2026-06-24

Fixed

  • The homepage "newly completed" and "guides in progress" grids now order by most-recently-updated guide first, instead of alphabetically. The intended recency sort was being silently dropped (raw SQL passed to a pagination layer that requires an allowlisted sort ref); GetGames now exposes name/recent sorts. Also removes a recurring FilterPagination.Sort warning from the logs.
  • Fixed the mobile navigation drawer rendering as an empty, oddly-styled white panel. It carried leftover bg-white classes from the light-theme era, so on the dark theme the menu was light-text-on-white and effectively invisible. The drawer now uses the themed dark background with visible nav links.
  • Sign in with Steam now works in production. Steam authenticates via OpenID 2.0 (not OAuth2), which libtwad had never implemented, so every Steam sign-in failed with an "Authentication provider configuration error". The flow is now fully wired end to end - redirect to Steam, verify the assertion server-side, and enrich the persona name and avatar via the Steam Web API.

v0.31.0 - 2026-06-24

Added

  • Signed-in home is now a personalised dashboard - a 'Welcome back, {name}' header, a compact search bar, and the recently-played list promoted above the fold. Signed-out visitors keep the marketing hero. Recovers a chunk of viewport that previously showed the same marketing pitch to users who were already logged in.
  • IGDB game-metadata enrichment. After a SKU sync lands a new (or existing) game, an enrich-game job matches it against IGDB - by Steam appid via /external_games when possible, falling back to a platform-scoped name search with a normalised-name similarity floor. The matched IGDB id is stored on the game so subsequent refreshes are O(1), and the release date, summary and genres land on the games table. SKUs that lack their own boxart get the IGDB cover backfilled. The game admin panel gains a Refresh IGDB button and a Rematch IGDB picker for fixing bad automatic matches. Credentials are a Twitch dev-app's client id + secret (config keys igdb_clientid / igdb_clientsecret); the feature no-ops cleanly when unset.
  • Xbox sign-in via OpenXBL is now wired up - the 'Sign in with Xbox' button on /signin redirects through https://xbl.io/app/auth and completes via /app/claim. Requires an OpenXBL public app key set as xblio_clientid and that app's redirect URI configured to /auth/xblio/callback on each environment. The achievement-sync side (xblio_apikey) was already in place; this completes parity with the old site's Xbox flow.
  • Per-page social cards - OG + Twitter (#11). The SEO plugin config now sets summary_large_image as the default Twitter card and a configurable og:image (defaults to the app logo). Game pages override with the SKU boxart and switch og:type to video.other. Together with the meta-description work, sharing any URL now gives a properly-titled, properly-imaged preview card on Twitter/X, Discord, Slack and the rest.
  • Per-page meta description and self-canonical on every public route (#6). Drives the search-snippet description on home, news, /games, /guides, /my-games, /contact, /profile, /player and individual game pages. Each route now passes a hand-tuned, data-driven description through a new seoMeta helper; canonical URLs are the path-only form (no friendly slug, no query string). Game pages prefer the IGDB summary when enriched and fall back to a templated guide-style description.
  • JSON-LD structured data (#10) emitted on every page via the new tamlib seo/jsonld helpers. Sitewide: Organization (name + logo + URL). Home: WebSite + SearchAction so Google can show the Sitelinks Searchbox pointing at /games?search=. Game pages: VideoGame (name, image, description, genre, datePublished, gamePlatform - all pulling from IGDB enrichment when present) and BreadcrumbList (Home > All games > game). Game-page rendering verified live for Cyberpunk 2077; passes a manual schema.org structure check, ready for Google's Rich Results test on production.
  • Sitemap (#3) now emits every indexable game (~250) at /game/{id}/s/{slug}, gated by the new seo_indexable flag (#9). LastMod reflects the most recent guide-progress recompute so crawlers only re-spider when guide content actually changes. Per-page is now emitted for games that fail the gate so the thin pages stay out of search results while crawlers still traverse their links.
  • Terms of Use (/terms/) and Privacy Policy (/privacy/) pages, served from content/. These were linked from the sign-in page but 404'd, so users hit dead links at the point of consent. The privacy policy reflects acheev's actual data handling - Steam/Xbox sign-in, gaming-library and achievement sync, PostHog product analytics - and the terms cover accounts, acceptable use and paid tiers.
  • Cookie/analytics consent gate via libconsent. A consent banner now asks visitors before any analytics cookies are set; PostHog is gated on analytics consent both client-side and server-side, and every consent decision is recorded to an audit log (consent.consent_log) for GDPR proof-of-consent. Only the necessary and analytics categories are presented, matching the privacy policy.
  • Game boxart/covers are now served through an app /covers proxy addressed on the assets-only subdomain (ACHEEV_ASSETS_URL) in prod. The proxy fetches the cover from Steam/IGDB on a (Cloudflare edge) cache miss and streams it back with a long immutable Cache-Control + ETag - no durable cover store; the edge and browser are the cache. Boxart links are cookieless and offloaded from the app host. Fetches are restricted to the Steam/IGDB image hosts (not an open proxy).
  • Crawlable A-Z browse index at /games/browse - paginated, server-rendered pages with real anchor links to every game that has a guide (gated to seo_indexable, matching the sitemap). Gives crawlers and no-JS visitors a link path to the whole catalogue, which the HTMX search box on /games did not. Linked from /games and the homepage.
  • Daily backstop sweep that recomputes guide_progress and the seo_indexable flag across all listable games. Per-save enqueues keep the flag current in normal use; this recurring sweep catches any missed enqueue or post-import drift so the sitemap and per-page meta-robots never lag the underlying guide data.
  • Restored the /docs pages (How it works, Our philosophy, 100% completion, Definitions, Contributing) plus a /docs index, ported from the previous site. These were indexed on the old site but 404'd on the rebuild. The stale roadmap/known-issues/tech-stack pages 301 to /docs/ rather than republish outdated content. Closes the last URL-continuity gap for cutover - every old indexed URL now resolves (200 or 301), none 404.
  • Adding a YouTube video as a guide resource now auto-fills its title and channel from the YouTube Data API (set ACHEEV_YOUTUBE_APIKEY). Enrichment is best-effort - any editor-supplied caption/publisher is kept, and with no key configured resources are added unchanged.

Changed

  • Reskinned the app in an ARC Raiders-inspired theme: pure-black surfaces, white type, neon orange as the primary brand colour, electric cyan as secondary, phosphor lime for 'unlocked' energy. Sharper corners, primary buttons gain a subtle glow, cards get a thin border so panels read as deliberate UI, and the no-boxart placeholder picks up a faint primary tint instead of disappearing into the new darker background.
  • Second UI polish pass: recently-played caps at 5 rows with a 'View all' link (the discovery panels now sit above the fold again), the progress bar colour mirrors completion state (green at 100%, info on base-complete, primary in progress), and the '100% complete' / 'Base game' status sits inline with the title instead of wrapping below the bar. Genre chips on the game sidebar take the primary tint so content metadata is visually distinct from status badges. Contact-page Discord button drops to outline so it stops competing with the Submit primary, and now opens in a new tab. Top-nav avatar gains a graceful person-glyph fallback so a 404 on the user's avatar URL no longer leaves a broken image.
  • Home page activity panels are now dense poster grids (3-5 columns of cover-art tiles depending on viewport) rather than vertical lists. Signed-out hero is tighter so both 'Newly completed' and 'Guides in progress' panels sit above the fold at 1440px. Index handler bumps the per-panel limit from 9 to 15 to fill three rows of five at xl.
  • Game page visible h1 drops the long 'achievement guide, roadmap and tracker' suffix in favour of just the game name plus a small subtitle, so it fits one line on mobile instead of wrapping to three. The verbose form stays in the for SEO. Achievement-list result counts now render with thousands separators (25,113 games rather than 25113 games) on browse/guides/my-games. Unlocked achievements lose the line-through name and the 'Unlocked ✓' text - the dimmed row plus the green check overlay on the icon is enough signal, and the strikethrough was eating readability of long names.
  • /games and /guides now default to the curated set - games that have any actual guide progress (guide_progress > 0) - matching the old site. The previous default was effectively no filter because GuideStatusProgress's SQL matched untouched games too. Result: /games shows 244 curated entries instead of 25,113, /guides the same set. A new 'Any (incl. ungrouped)' dropdown option preserves the old behaviour for when you genuinely want the long tail. GuideStatusProgress is now tighter ('actively in progress', i.e. some work done and not yet finished) so the home page 'Guides in progress' panel shows real WIP guides instead of random untouched games.
  • Local dev port moved from 15000 to 64000 to match the old site (and so the existing OpenXBL dev app's registered redirect URI - http://localhost:64000/auth/xblio/callback - works without re-registration). Touches main.go default + config.dist.yml + config.yml url; production env configs are unchanged.
  • Activity feed (#16) is now dynamic-aggregation, restoring the old acheev.net behaviour. New twad events of kind game:new are rolled into a single 'N games newly listed' item across a 4h window (thumbnail strip; +N more link if >20). Per-game game:guide-status events collapse within 30 minutes into one 'Guide updated' item carrying the latest percent (with success-coloured progress bar, flips to a 100%-complete badge when the guide is done). Editorial news (content/news/*.md) interleaves chronologically. The render gets ARC-themed cards with leading icons + relative timestamps; the homepage 'Activity feed' link and /feed both render the same component. Items refresh from twad.events on a 5min in-memory cache so the handler hot path is one map lookup.
  • Game page restored / extended to match the old acheev.net surface (#19, #20). Stats panel adds Singleplayer / Multiplayer / Difficulty-affects rows when known. Bare SKU replaced with a visual Editions list - platform icon + edition name + active-row marker; single-SKU games show the platform inline instead. Signed-out visitors get a Sign in CTA card with feature bullets in the sidebar. Achievement-list filters expanded to match the old set: search box (debounced), kind, missable, glitched, sort, hide-unlocked. Achievement-kind / missables / glitches breakdown bars were already in the sidebar; with the layout fix from #21 they're now visible at all viewports.
  • Game sidebar boxart is now capped at 8rem (128px) and sits in a flex row alongside the stats when the sidebar spans the full page width (below lg). On wide layouts (lg+, sidebar pinned at 300px) it keeps the existing stacked layout. Previously the cover used w-full unconditionally and ballooned to 800-1000px tall on tablet/laptop widths where the sidebar collapses to the page width.
  • Game-page URL canonicalisation matches the old acheev.net behaviour. Anonymous visitors land on /game//s/ ('s' as the SKU placeholder) so the same URL covers all SKUs and SEO has one canonical form per game; the page renders against the best-available SKU for content. Signed-in users with ownership of the game get redirected to /game/// instead, so the URL surfaces their progress. Previously every request 302'd to a numeric SKU regardless of identity, fragmenting the SEO surface and ignoring user ownership.
  • Game page now has a single unified header: cover thumbnail (capped at 9rem) on the left, name + subtitle + IGDB summary + genre chips + key-stat pills (year, achievement count, guide-progress, single/multiplayer flags) on the right. Previously the cover and name were split across the page top and the sidebar overview, creating duplication and an oddly-floating cover at narrow widths. Sidebar now carries only the breakdown chart, editions selector and signed-in / signed-out CTAs.
  • Per-game guide page now server-side renders the achievement list + overview sidebar in the initial HTML (#4). Crawlers (and no-JS visitors) get the full content without HTMX shells. The HTMX endpoints stay around as swap targets for filter/sort interactions.
  • URL canonicalisation tightened for SEO (#2). The slug-bearing form is now the single canonical URL for per-game pages: any request to /game/{id}/{skuID} (or with the wrong slug) 301s to /game/{id}/{skuID}/{slug}. The anonymous /s sentinel canonicalises to /game/{id}/s/{slug} the same way. Per-page rel=canonical mirrors the URL form the visitor is on (/s/{slug} or /{skuID}/{slug}), so equity doesn't split between the two. Internal links across the app now emit the slug form directly to avoid the 301 round-trip. Legacy /skumap paths return 410 Gone so Search Console drops any that were ever indexed.
  • Upgraded the frontend from Tailwind CSS v3 to v4 (daisyUI v4 to v5), aligning acheev with the rest of the estate and the tam assets convention. The ARC-style dark "acheev" theme and all custom component styling are preserved, translated to daisyUI v5 CSS variables. This also lets workspace libraries' component CSS (e.g. the libconsent dialog) compile into the bundle, which v3 silently dropped.
  • The homepage now leads with the activity feed (new games, guide progress, news) instead of the completed-guides grids. The feed is a livelier, faster-growing lead; the completed/in-progress guide grids are demoted below it. Feed shows up to 12 recent items.

Removed

  • Removed the Plausible analytics integration. acheev now uses PostHog as its sole analytics provider, matching the privacy policy. The Plausible script (analytics.tamperan.com) is no longer loaded.

Fixed

  • Sign-in page now shows the real Acheev logo and name; previously it served a broken /logo-192.png and the scaffold-template 'Skel' placeholder.
  • Top-nav "My games" link now goes to /my-games (the real route) instead of /mygames (404).
  • Contact page now loads instead of 404ing - addRoutesContact was defined but never mounted, and the form was rendering a template name ("contact:swap") that did not match the {{define "contact-swap"}} block, causing a 500.
  • Games without cover art now render a deliberate placeholder tile (gradient + gamepad glyph + name) instead of an empty/grey rectangle, in the games and guides grids, my-games, player profile completed-games, recently played, completion cards, the game sidebar, and game header. Closes a gap where some templates rendered a broken when no boxart was present.
  • Favourites sidebar now stays visible (with a helpful empty-state CTA) when a signed-in user has no favourites yet, instead of collapsing and shifting the main content sideways.
  • Identity sync now creates a placeholder game + sku + ownership for previously-unknown SKUs and enqueues a SKU sync to fill in achievements/boxart, instead of silently dropping them. Ports the flow that already existed in the old app. Also patches boxart onto an existing SKU when the ownership poll surfaces one and the SKU lacked it.
  • Top-nav section pill now correctly highlights the current section. Menu URIs were '/games/' with a trailing slash while the canonical request URI is '/games', so the active-state equality check never matched - 'Home' was the only item that ever lit up. Drop the trailing slashes and set ActiveSubUrls on each top-level item so the pill also stays lit on subpages like /games/search-results.
  • Recover 98 stranded game-level intros (#14). The v0.30 rebuild left games.guide empty for ~98 games whose intros still lived on the linked nuggets.guide column, so those intros rendered blank on the live site. Migration 004 copies the content across following the FK and is safe to re-run (only fills empty guide columns).
  • Game page sidebar (overview, breakdown chart, SKU selector, dev tools) no longer disappears below the long achievement list at <1280px (#21). Lowered the side-by-side breakpoint from xl to lg (1024px), and below lg the sidebar is reordered above the achievement list so the boxart + stats + breakdown stay visible on every viewport.
  • Game page intro now resolves {{Achievement}} tokens to icon + anchor links that jump to the matching row in the achievement list, restoring the old acheev.net behaviour (#22). Previously the raw {{...}} braces rendered verbatim in the intro paragraph.
  • Frontend asset pipeline now uses the canonical tam assets generator instead of hand-written ../../../ paths into the workspace. New //go:generate tam assets in generate.go produces ui/tailwind/src/libassets.generated.{css,ts}, imported by input.css and main.ts; tam devserver runs the generator automatically. Fixes the esbuild 'Could not resolve ../../../../tamlib/web/src/*' errors that had been flooding the dev log on every rebuild. Hand-written placeholder imports updated to the correct 6x ../ depth as a fallback while the host build catches up to the new pattern.
  • Game-page sidebar no longer duplicates the game name. The h3 next to the cover repeated the page h1 from game.gohtml (and stacked a third copy on top of the placeholder cover when there was no real boxart - three Bomber Crews on one page). Drop the redundant h3; the page h1 plus the cover graphic do the naming.
  • BestSkuForGame now prefers SKUs that actually have boxart - previously it just took the lowest id, so multi-SKU games where only one SKU had cover art would land on the bare placeholder on /game//s. Verified: Bomber Crew's anonymous URL now renders with the real cover image instead of the empty gradient.
  • Signed-out header no longer shows two redundant sign-in controls. The navbar rendered both a 'Sign in' button and an account/avatar glyph for logged-out visitors, both linking to /signin/go. The avatar is now reserved for the signed-in account menu; signed-out shows only the Sign in button.

v0.30.1 - 2026-06-20

Fixed

  • Fixed the navbar menu call (wrong arg count) that blanked every page, and regenerated the compiled Tailwind CSS so the new navigation, hero and placeholder utility classes render.

v0.30.0 - 2026-06-20

Changed

  • UI/UX pass on the public pages - restored a global navigation menu (top navbar on desktop, drawer on mobile), rebuilt the home page with a search hero, browse CTAs and real recently-played, surfaced the games-list filters (network / guide status / size), added sort (rarest-first) + filter (kind, hide-unlocked) to the achievement list, and improved the no-boxart placeholder and chapter labelling.

v0.29.0 - 2026-06-20

Added

  • Three library-attached QA bots (qa-big / qa-normal / qa-small) linked to real Steam libraries of different sizes, so the signed-in views (recently-played, favourites, completion cards, My Games) can be previewed at different scales. Dev/test only.

v0.28.0 - 2026-06-20

Changed

  • Ported the bulk achievement-tag editor to the new core API (it was broken on the old ORM-style template) and removed the half-built SKU-map admin route whose save path was a no-op stub. Added the first unit tests (network enum mapping, nullable nstr/nint scanners, game-stats tally, Xbox response parsers).

v0.27.1 - 2026-06-20

Fixed

  • A persistently-failing identity sync (expired key, private profile, upstream 5xx) no longer churns the queue. Failed syncs now record an exponential backoff (5 min doubling to a 24 h cap) and the housekeeper skips identities until their retry time, resetting on success.

v0.27.0 - 2026-06-19

Added

  • Xbox achievement sync via the OpenXBL (xbl.io) API - a new network adapter (PollOwnerships/PollOwnership/PollSku) wired into the sync dispatcher and the housekeeper's synced-network set, plus an xblio_apikey config. Requires a valid OpenXBL key to operate.

v0.26.0 - 2026-06-19

Changed

  • Recently-played on the profile now orders by last achievement unlock instead of last-played (Steam only reports last-played for a user's own profile), so it is populated for synced libraries; games with no unlock activity are omitted. Also removed two more dead pre-port templates (util-resource, game-header-resources).

v0.25.0 - 2026-06-19

Changed

  • Removed dead pre-port templates (game-header, game-util-skus, gf-favorites, util-sku-favorite) that were superseded by the rebuilt UI and no longer referenced.

v0.24.0 - 2026-06-19

Added

  • Rebuilt several view-layer features into the new UI that were previously stubbed - achievement-tag breakdown minibars (Kind/Missable/Multiplayer/Glitched) on the game overview, a recently-played list on the profile, a favourites list in the sidebar, completion-celebration cards for finished games on My Games, and Prev/Next pagination on the games, guides and My Games lists. Adds GameStats to core and wires the global template helpers to the request context.

v0.23.2 - 2026-06-19

Fixed

  • Picked up a libjobs fix so orphaned jobs (left running by a crashed or replaced instance, e.g. across a deploy) are correctly reclaimed and re-enqueued instead of failing every reaper tick on the unique active-job index and sitting stuck forever.

v0.23.1 - 2026-06-19

Fixed

  • With sync_disable set, the housekeeper's persisted recurring schedule is now actively removed (via libjobs UnregisterRecurring) rather than merely left unregistered, so an instance that previously ran with sync enabled truly stops syncing.

v0.23.0 - 2026-06-19

Added

  • New sync_disable config flag that turns off all automatic background syncing (the periodic housekeeper and login-triggered network sync) while leaving the job worker, events and notifications running. Intended for staging and local dev so the instance does not poll upstream networks continuously.

v0.22.4 - 2026-06-19

Fixed

  • Steam sync no longer fails on games without an achievement schema. The Steam API returns HTTP 400 ("Requested app has no stats") for such games and 403 for private profiles; these are now treated as empty results rather than hard job failures, which previously caused those ownerships to retry forever and never record a synced timestamp.

v0.22.3 - 2026-06-19

Fixed

  • After creating a new ownership during identity sync, the follow-up sync_ownership job was enqueued with the sku id instead of the new ownership id, so it failed "ownership not found". Use the created ownership's id.

v0.22.2 - 2026-06-19

Fixed

  • Creating a new ownership during sync no longer fails - the nullable date_synced column was mapped as a plain int64, so the INSERT ... RETURNING of a freshly-created ownership (date_synced still null) failed to scan, which also cascaded into "ownership not found" on the follow-up progress sync.

v0.22.1 - 2026-06-19

Fixed

  • The housekeeper now only enqueues syncs for networks with a working handler (Steam). Previously it picked unsupported Xbox/PSN identities (whose nulls sorted first), which failed and were re-picked every tick, starving the Steam syncs.

v0.22.0 - 2026-06-19

Added

  • Rebuilt acheev on the tam stack - dark-themed achievement guides (icons, badges, rarity, guide bodies, collectibles, resources), per-user unlock progress, profile / my-games / public player pages, news and activity feed. Steam sync via libjobs, twad login bridge onto the legacy schema, libcentral integration, and the full editor tooling (game/achievement metadata, guides, collectibles, resources). Database is schema-compatible with the existing live DB.

v0.21.0 - 2025-02-11

Added

  • Added screenshot-paste tool for guide editors; screenshots can now be pasted directly into achievement Resource editing, with an optional caption
  • Achievement images are now click-to-zoom - this is especially nice for Xbox games that often have full 1080p images/artwork as the achievement image

Changed

  • Made some minor layout tweaks, e.g. for search/filter options in the Achievement Guides page on mobile

Fixed

  • Fixed a crash issue in the docs, which affected the "Contributing" page

v0.20.0 - 2025-02-04

Changed

  • Improved the homepage "Recently played" widget to show basic stats, and make it the first item on the page as its likely to be the most useful

v0.19.0 - 2025-01-30

Added

  • Improved the Showcase/profile page for new users; it now tells you if your profile is syncing and automatically updates to include detected 100% games
  • Added "Story mode" setting to game guides; Story / Sandbox / Skirmish / Casual
  • Added "is story completion" flag to achievements, to drive "is story complete?" mechanic for My Games and the public showcase

Changed

  • Reduced the size of the game bvoxart images on player 100% completion profile pages, for better use of space

v0.18.0 - 2025-01-20

Changed

  • Improved the graphic charts in game guides; gone are the messy donuts - instead clean colorized bars for quicker visual reference on missables/glitches/etc

Fixed

  • Fixed cases where achievement descriptions could be blank for hidden achievements even when we do already know the description (e.g. from Xbox sync)
  • Fixed incorrect rarity percentage handling - this now correctly aggregates across all known Editions/platforms for each achievement

v0.17.0 - 2025-01-14

Added

  • Initial support for editing+display of game-level (as opposed to per-achievement) linked resources/videos/maps/etc

Fixed

  • Fixed "Mutually exclusive" type achievements not being color-highlighted as dangerous; they are now orange

v0.16.0 - 2025-01-14

Added

  • Acheev is now an installable web app (but it won't bug you about it all the time)

Changed

  • Updated Roadmap and Known issues content pages

Fixed

  • Fixed stay-signed-in not working correctly - login sessions are now maintained until explicitly logging out
  • Fixed the signin methods (Xbox, Steam, etc) appearing in a random order that varied on each pageview

v0.15.0 - 2025-01-13

Changed

  • Changed search, and public game listings, to hide older games (pre 2020) that have no achievement guide - part of a wider plan for more focused content

v0.14.1 - 2025-01-08

Added

  • Added extra handling for bad/invalid game URLs (e.g. from Reddit mobile app); so now they redirect to the correct game URL where possible
  • Added SmartLinks info to the "How it works" docs page

Changed

  • In Homepage "WIP Guides" card, added content indicating how progressed each guide is; e.g. "Nearly done"
  • Improved the "sign in for cool stuff" CTA on game pages; more useful text and nicer formatting
  • Further improvements to Youtube embeds - autoplay on dialog open, higher resolution thumbnails

Fixed

  • Fixed broken link through to Youtube channel for embedded Youtube videos

v0.14.0 - 2024-12-16

Added

  • Improved Youtube embeds in achievement guides to show a thumbnail image, but video playback at a larger size in a modal/overlay - faster page load times and viewing

Fixed

  • Fixed various cases of game ownership and achievement progress not syncing correctly - this should auto-fix for everyone the next time they log in
  • Fixed various Editor issues with editing Resources (Youtube videos, links to external maps/guides/etc)

v0.13.0 - 2024-12-13

Added

  • Added more docs across the site to help better explain what Acheev does
  • Content/text tweaks across the app to improve clarity/readability, especially for users who haven't signed in yet
  • Added a contact form, for people wanting to reach out but who don't like Discord

Fixed

  • Fixed some cases where a game's boxart would just be generic, by automatically cycling through SKUs/Editions for the game until a working boxart is found
  • Fixed some cases of broken game boxart - now the generic/placeholder image will correctly be used instead

v0.12.0 - 2024-12-11

Added

  • Everybody gets a public profile + 100% showcase page now, yay
  • Implemented Green/Blue completions - where a Blue completion is 100% of obtainable achievements in the base game (excl. DLC)
  • Added display of contributors to the game guide pages, linking to their public profile/showcase

v0.11.0 - 2024-12-10

Added

  • Chapter/DLC support is back; achievements can be assigned (by Editors) to chapters/DLC/sections, and completion progress is reported individually for each
  • For Editors, the Bulk Edit Achievements page now shows achievement icons, for easier recognition of which one is which
  • Reworked homepage for some more relevant content - this is one of what will be many iterations

v0.10.2 - 2024-12-09

Fixed

  • Fixed a regression causing errors on the Profile page
  • Fixed Favorites not appearing in the mobile/popout sidebar nav (only in desktop view) - now they correctly appear in both

v0.10.1 - 2024-12-09

Fixed

  • Removed random/redundant word "games" from the top-right of the Achievement Guides game list page
  • Fixed non-working "Hide already unlocked" option in game pages - this now correctly hides achievements you've already unlocked, for a cleaner view

v0.10.0 - 2024-12-09

Added

  • Added more clarification to Definitions and Contributing docs around achievement tags like Missable
  • Added UI for editors to edit/manage checklists in achievements
  • Added debug functions for merging/de-duping achievements across SKUs (e.g. Hellblade: Senua's Sacrifice where they are named differently on Steam)
  • Added a nicer display of the different Editions (SKUs) when a game has multiple different Editiions available
  • Editors can now edit game name's - e.g. to remove redundant suffixes like "GOTY" or "PC Edition"; game names should just be the clean name of the game only

Fixed

  • Fixed the first game you mark as Favorite not showing up in the sidebar menu without an F5 refresh - this works now

v0.9.0 - 2024-12-03

Added

  • Added content pages for Roadmap, Known issues, and Tech stack

Fixed

  • Fixed achievement completion progress not visually updating on a sync in-page without an F5-refresh, this works properly now
  • Fixed the green "100% complete" banner being shown for owned games that don't actually have any achievements (accessible through Recently-played)

v0.8.0 - 2024-12-02

Changed

  • Improved editor 'Edit' button for each achievement with color coding to signify whether that achievement's guide info is complete or not (color tint)

v0.7.0 - 2024-12-02

Added

  • Reworked and added to docs content; added Contribution guidelines, How it works material and updated achievement tags definitions

v0.6.0 - 2024-12-02

Added

  • Truncate the game boxart images in "New games listed" items on the homepage, so that huge syncs of 100s of new games don't crowd out the homepage
  • Added icons to the homepage activity feed titles

Changed

  • When syncing achievement progress after syncing your Steam/Xbox/etc account, Acheev now enqueues updates most-recently-played-first; this is more useful...

Fixed

  • Fixed the generic boxart image having different aspect ratio/shape to regular boxart images
  • Fixed a bug that would lowercase all game names. Sigh.

v0.5.0 - 2024-11-29

Added

  • Editors can now turn editing options on/off - for a clearer view when using (not editing) the content
  • Added a link to Discord on the main nav sidebar
  • Added a separate "Achievement guides" section to list all games that have a guide (whether complete or not) - replacin the All Games A-Z, but more relevant

Changed

  • Minor visual tweaks to the guide status info on the main game pages; to the pie charts, stats, etc

Removed

  • Removed the A-Z games directory - nobody needs 14k games without guides listed (they're still discoverable through search)

Fixed

  • Fixed the All Games page not having any title

v0.4.0 - 2024-11-28

Added

  • Story-related Unmissable achievements will now always have guide text saying they'll unlock automatically - no need for guide authors to manually add this
  • Added "Recently Played" widget to the homepage, when signed in
  • Added a profile syncing delay on login, max 5 seconds, to allow your identity/ownerships/lastplayed data to sync; reduces incidence of seeing outdated info
  • The "Your progress" widget on games you own now has more detail; like how many missables remain or if all missables are unlocked already

Changed

  • Improved homepage activity feed relevance, and fixed various bugs (including sort order when further updates/changes are made to the same item)

Fixed

  • Fixed linked accounts not automatically triggering an update sync on login - this now happens

v0.3.1 - 2024-11-27

Fixed

  • Fixed cases where achievement lists could be displayed in a weird/wrong order - is now always descending rarity order (until it becomes customisable)
  • Fixed various mobile device layout issues

v0.3.0 - 2024-11-26

Added

  • (Re)implemented guide text cross-linking to achievements, with dynamic formatting (e.g. with a strike-through if already unlocked)
  • Further iteration on the page header for each game's page - layout of text, and stats display
  • Various improvements to guide-editing UIs

Fixed

  • Fixed achievement metadata badges not being correctly shown for some combinations (e.g. 'Do all', 'Soft-missable')
  • Fixed cases where some text against achievements (e.g. "Locked") would still display to anonymous users, where ownership/locked-status cannot be known

v0.2.0 - 2024-11-25

Added

  • reworked homepage activity feed to include different news/article types for better relevance
  • Added news feeds, so we can keep you updated :)

Fixed

  • Improved quality of resized/optimised game and achievement images
  • Fixed game boxart having different shapes for different platforms; resize to the same dimensions for now
  • Fixed game boxart not being resized/optimised properly, now they should load much faster!

v0.1.5 - 2024-11-23

Fixed

  • Fixed an error case when syncing a players achievements for a game, and there is progress against new achievements in the game that Acheev didn't know about

v0.1.4 - 2024-11-22

Added

  • Added support for embeddable Resources inline in guides; e.g. Youtube videos illustrating how to unlock achievements
  • Serve game/achievement images from a separate subdomain to improve site performance/responsiveness

Fixed

  • Fixed resized achievement images still being large downloads - acheev is faster now
  • Removed multiplayer singleplayer/multiplayer/anywhere filter dropdown from the game page for games that don't have multiplayer

v0.1.3 - 2024-11-21

Added

  • In achievement lists, hide the multiplayer/singleplayer flag for games that have no multiplayer - to simplify the UI
  • Improved game name keyword search, to cope better with games like S.T.A.L.K.E.R

Changed

  • Improved throughput/performance of background task processing for guide status updates, achievement syncing, etc

Fixed

  • Fixed aspect ratio of achievement images for Xbox (16:9, as opposed to Steam's images at 1:1/square)

v0.1.2 - 2024-11-20

Changed

  • Moved docs pages to /docs/ to accommodate more documentation/guidance in future updates

Fixed

  • Fixed XBox Live sign-in

v0.1.1 - 2024-11-20

Changed

  • Improved SEO sitemap to deprioritize indexing of games without any guide yet

Fixed

  • Fixed Favorites star on the game pages not showing up when signed out; now it prompts to sign in to add games to Favorites

v0.1.0 - 2024-11-20

Added

  • Added changelog/release notes - each functional update to the app's software/features will now be noted here