Commit Graph

34 Commits

Author SHA1 Message Date
c84600ae3e fix hltb worker
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-04-02 21:23:00 +03:00
f820e86277 steam sync
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-04-02 21:11:54 +03:00
457b8c8443 added user profile page
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-04-02 20:06:38 +03:00
b723214c86 Add completion animation and ding sound on Done button
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Intercepts the Done form submit, plays a two-note ding via Web Audio
API (no audio file), animates the card with a white glow + scale, then
submits after 680ms. Only fires for completion, not abandon or delete.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 23:59:09 +03:00
b289e7c7fe Refactor item form visibility to data-attribute driven JS
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Replace hardcoded id-based section lookup with declarative rules:
- data-show-category="games|books|films" on sections
- data-hide-status="unending" on individual fields

JS now has a single updateVisibility() that evaluates attributes.
Adding new conditions only requires touching HTML, not JS.

Also hides Progress and Total Hours for unending items.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 23:55:47 +03:00
23eefc269b Fix migration graph: restore missing 0006 file, add 0008 cleanup
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
0007_merge referenced 0006_item_category_unending which git had
renamed, causing NodeNotFoundError on clean DBs. Restores the file
so both 0006 leaves exist, then 0008 reverts the stale category
choices back to the correct set (no unending in category).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 23:46:20 +03:00
05235d234e Add merge migration for conflicting 0006 leaves
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
0006_item_category_unending was already applied to the dev DB before
the rename commit, causing a conflict with 0006_item_status_unending.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 23:38:22 +03:00
2e0ca22dd9 Fix unending: shelf status, not category
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Unending belongs in STATUS_CHOICES alongside completed/abandoned.
Adds an Unending shelf tab and an ∞ button on active game cards.
Reverts the incorrect category addition from the previous commit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 23:32:09 +03:00
b765067c5b Add unending category for session-based games
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
For games like Dota 2 that have no completion state — shows hours
played on the card, reuses the games fields in the form (hours played
/ total hours), and gets its own cyan badge. No DB column change,
only choices metadata update.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 23:25:41 +03:00
da11a056ed Add completed/abandoned shelves with status transitions
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Items can be moved to Completed or Abandoned via card buttons.
Only active items appear in the default/category tabs; completed and
abandoned items are visible only in their respective shelf tabs.
Restore button moves items back to active.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 23:19:10 +03:00
095614cb65 Fix howlongtobeatpy version constraint (max is 1.0.21)
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-03-31 23:06:45 +03:00
ffcd8c40b4 Add HowLongToBeat estimates to game cards
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
- Fetch HLTB main/extra/completionist hours when a game item is saved
- Re-fetch only when name or category changes on edit
- Steam imports also fetch HLTB for each selected game
- Cards show compact HLTB row: "HLTB: 40h · +extra 60h · 100% 100h"
- Edit form shows HLTB breakdown as a hint next to Total hours field

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 23:04:36 +03:00
a4c31bf40b Add Steam library import via OpenID
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- Steam OpenID flow: user authenticates with Steam, we get their Steam ID
- Server-side API key fetches their owned games with playtime
- Import page shows full library, marks already-imported games
- Imported games land in backlog as GAMES items with hours_played set
- STEAM_API_KEY env var plumbed into both prod and dev containers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 22:38:28 +03:00
8f34d9388f Fix logout 405: use POST form instead of GET link
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Django 5+ LogoutView rejects GET requests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 22:23:32 +03:00
e119e79751 Add dev environment: debug subdomain, IP restriction, separate container
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- Add debug.killmybacklog.com nginx config (IP-restricted to 164.215.8.152)
- Add django-dev container on port 8081 in docker-compose
- Add dev branch pipeline step deploying to django-dev
- Add killmybacklog.com and debug subdomain to ALLOWED_HOSTS/CSRF origins

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 22:09:53 +03:00
8f0667d160 add tests
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-03-31 21:52:26 +03:00
80f5335886 add sign up process for backlogger
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-03-31 21:45:29 +03:00
ce3fdfffa1 move to new domain
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-03-31 19:33:16 +03:00
959f0aa9d7 Fix 500: avoid dict lookup as default filter argument
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Django raises VariableDoesNotExist when a failed dict lookup is used as a
filter argument (|default:mineral.properties_ru.X). Rewrite color description
to use an {% if %} block so the dict lookup is always the main variable.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 09:05:22 +03:00
0a3248daa4 Add Russian translations for mineral property values
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- Add properties_ru JSON field to store translated category, crystal_system,
  luster, streak, specific_gravity, color_description
- Add translate_minerals management command using deep-translator (Google
  Translate), with a hard-coded dictionary for crystal systems
- Template: show translated values in RU mode, fall back to English if missing
- Add deep-translator to requirements.txt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 08:56:23 +03:00
1e5453f62d Fix language toggle: use body class instead of inline styles
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- EN mode no longer shows Russian subtitle under mineral name
- RU mode now correctly reveals all lang-ru elements via CSS body.mode-ru rules
- Subtitle in RU mode shows English name as reference below Russian heading

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 08:45:33 +03:00
8a162afe2a Add Russian translations and pronunciation button
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- Russian fields on Mineral model (name_ru, description_ru, history_ru, etc.)
- scrape_minerals_ru management command fetches from Russian Wikipedia via langlinks
- EN/RU toggle in header, saved to localStorage
- Speaker button next to mineral name uses Web Speech API
- Section headers and labels translated
- Russian Wikipedia link in footer when in RU mode

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 22:54:46 +03:00
7220af6a60 Add mineral search and permalink pages
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- Search bar toggle in header (magnifying glass icon)
- /daily-stone/search/?q= endpoint with results list
- /daily-stone/mineral/<id>/ permalink for each mineral
- Mineral count shown in footer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 22:44:13 +03:00
aa64d6949a Make mineral admin fully editable with organized fieldsets
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Removed readonly on image_urls so URLs can be changed in admin.
Added list_editable for day_of_year and color_hex for quick edits.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 22:32:21 +03:00
cd068ca593 Add dynamic crystal favicon colored per mineral
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
SVG gem shape as inline data URI, automatically tinted with the
mineral's color_hex. No static assets needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 22:20:14 +03:00
6695e7e8ab Render chemical formulas with proper subscript notation
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Adds a template filter that cleans up spaced-out formulas from scraping
and wraps subscript numbers in <sub> tags for proper display.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 22:13:19 +03:00
44e2420c29 Add random mineral button to daily-stone page
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 22:03:43 +03:00
0be99e8e9a Add daily-stone page showing a different mineral each day
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
New dailystone app with 207 minerals scraped from Wikipedia.
Each day displays a different mineral with photos, formula,
properties, description, and history. Page theme color matches
the mineral's typical appearance.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 18:30:10 +03:00
a8ab5f6ce1 Add backlogger app at /backlogger/ with login protection
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Django app with Item model (games/books/films/other categories), CRUD
views, and login-required access. Login page at /accounts/login/ uses
custom dark-themed template consistent with the site design.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 22:18:32 +03:00
62bb86f11d Add nginx vhost configs for reference
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-03-29 21:46:18 +03:00
81009b6705 Add core migrations
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-03-29 21:37:03 +03:00
114fabdbdb Switch to Django with visitor tracking and server info footnote
All checks were successful
ci/woodpecker/manual/woodpecker Pipeline was successful
2026-03-29 21:31:35 +03:00
7f4b543f3d Allow manual pipeline trigger
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-03-29 21:18:17 +03:00
021d53fe13 Initial website commit 2026-03-29 21:08:06 +03:00