StudsUp β€” Version history

Every change, fix and new feature tracked here. Current version: v9.0

v9.1 Current July 25, 2026
Own mail server, real password reset, parts-image overhaul, and profile-blog fixes
βœ‰οΈ
Own mail server β€” StudsUp now runs its own Postfix server with DKIM signing for studsup.eu, relayed for delivery. Powers password resets and account emails New Backend
πŸ”‘
Real password reset β€” "Forgot password?" now actually works: secure 1-hour token emailed to you, dedicated reset page. Previously just showed a fake success message Fix
πŸ“§
Email verification on signup β€” new accounts receive a welcome/verification email; existing accounts are grandfathered in as verified New
πŸ””
Notification settings β€” new "Alerts" tab in profile settings: master email toggle, new-listing alert toggle, and a configurable check frequency (2/5/10/20/30/60 min) New
πŸ–ΌοΈ
Parts catalogue images fixed at the root cause β€” the LDraw fallback colour code used everywhere ('16') was a meta-colour that never renders; changed to '0' across the catalogue, collection, missing-parts checklist and homepage. Coverage on a broad sample jumped from ~19% to 84%+ Fix Backend
πŸ“„
Honest icons for unphotographable items β€” activity booklets, cards and manuals now show a document icon instead of a broken-looking placeholder; wire/cable parts show a plug icon when no real photo exists Improved
πŸ”—
Printed/decorated part variants β€” BrickLink usually only photographs the plain mold, not every print; added a base-mold fallback so parts like printed minifig pieces and dragon wings find a real photo more often Fix
πŸ“‘
Pagination bug fixed β€” Technic/Duplo filtering was happening client-side after the page was already fetched, occasionally producing "No parts found" on a valid page number. Moved server-side so totals and page counts are always accurate Fix Backend
↕️
Parts sort dropdown β€” was previously decorative only; now actually sorts by price, availability, sold quantity or element ID Fix
πŸ“Έ
Blog photo/video posts β€” Photo and Video post types can now actually attach a real upload; previously there was no file picker at all despite the option existing Fix
πŸ’Ύ
Profile settings actually save β€” display name, bio, location, avatar photo/colour and password changes were previously cosmetic only (localStorage-only, no server call); all now persist for real Fix
πŸ“±
Mobile camera fix β€” scanning a set or identifying a brick now opens a single native camera/gallery picker instead of forcing the camera and sometimes double-capturing a photo Fix
v9.0 June 27, 2026
Color system overhaul β€” accurate colours, instant filter, multi-select
🎨
Color accuracy fix β€” GROUP BY rp.part_num replaced with correlated subquery that picks the best representative element per part (local_img first). Eliminated ~70% grey (#cccccc) colour swatches Fix Backend
⚑
Instant colour filter β€” clicking a colour in the sidebar now immediately filters parts without needing "Apply filters" button Fix
πŸŽ›οΈ
Multi-colour filter β€” new color_ids query parameter accepts comma-separated IDs; selecting multiple colours now works New Backend
0️⃣
Black (color_id=0) fix β€” falsy zero was skipped by colour filter logic; now correctly filters 10,047 black parts Fix
πŸ”
Search page β€” removed both occurrences of dev uvicorn startup instructions shown to production users Fix
πŸ§ͺ
Full deployment check β€” automated 10-point test suite: API health, colour accuracy, Black/multi-colour filters, BL fields, search warning, part detail, builder, category images, instant filter Improved
v8.9 June 27, 2026
Parts catalogue β€” 12 categories, real LEGO images, BrickLink fallback
πŸ“¦
12 clean categories β€” replaced 60+ raw Rebrickable categories with 12 BrickArchitect-inspired groups: Basic Β· Plates Β· Slopes Β· Round & Curved Β· SNOT Β· Panels & Windows Β· Minifig Β· Nature Β· Vehicle Β· Technic Β· Duplo Β· Other New
🧱
Category thumbnails β€” each category now shows a real 36px LEGO part photo instead of emoji. Images sourced from local element DB with BrickLink CDN fallback New
πŸ–ΌοΈ
4-source image waterfall β€” part images try: local DB β†’ BrickLink colored (PN/{color_id}/{part_id}) β†’ BrickLink no-color (PL/{part_id}) β†’ Rebrickable LDraw render Improved
πŸ”—
API fields β€” /api/catalog now returns bl_part_id, bl_color_id, part_name, color_css for BrickLink image URL construction Backend New
πŸ—‘οΈ
Removed "Rebrickable catalogue" button from parts page header Fix
πŸ”
Part detail β€” dynamic loading β€” /pages/part-detail.html?part=6396802 now resolves correct part by element_id or bl_part_id instead of showing hardcoded Plate 2Γ—4 demo Fix
v8.8 June 27, 2026
MOC Builder v9.4 β€” connection engine, stud-exact positioning, PDF generation
πŸ”©
Connection engine β€” getConnectionY(partNum) returns correct LDraw Y offset per part type. 6157 wheel holder: Y=βˆ’8 (stug anti-stud at Y=8). All others: Y=0. Eliminates parts floating inside the plate New
πŸ“
Stud-exact placement β€” 1762 go-cart parts placed on real stud positions derived from .dat geometry: steering at Z=βˆ’30, round bricks at Z=+30, holders at Z=Β±20 Y=βˆ’8, wheels at Y=βˆ’3 (holder βˆ’8 + wpin +5) Fix
πŸ“„
PDF hang fix β€” pre-renders all step screenshots before PDF generation; eliminated indefinite hang on tyre subfile loading Fix
πŸ›
Duplicate DOCTYPE fix β€” Python string replace was appending full file as text inside template literal; caused SyntaxError and blank builder page Fix
🎨
CHART_COLORS guard β€” shared.js redeclaration on repeated navigation caused builder JS to silently fail; wrapped in if(typeof…===undefined) guard Fix
πŸ§ͺ
POC 33/33 β€” all tests passing: core:16/16 Β· 1762:8/8 Β· db:9/9. Every run generates 2 PDFs (1762 go-cart + 60400 go-kart) Improved
πŸ—οΈ
LUGBULK order page β€” new /pages/lugbulk-order.html with 4 tabs (Order Β· Nominations Β· Voting Β· Summary), 3-tier voting system (5ptΓ—5 Β· 3ptΓ—10 Β· 1ptΓ—25), ESTLUG removed New
v8.7 June 27, 2026
Security, cleanup & mobile fixes
πŸ”’
GitHub repo private β€” source code no longer publicly accessible Security New
©️
Copyright headers β€” added to all 23 frontend/backend files Security
πŸ”‘
JWT Auth system β€” /api/auth/login, /api/auth/me, change-password; admin endpoints protected Backend New
πŸ—οΈ
Minification pipeline β€” scripts/minify.py removes comments & collapses CSS/JS Improved
🧹
Removed LUGBULK label from search tabs and nav β€” now shows as Parts. LUGBULK is a LUG-members-only ordering feature, not a public catalogue name Fix
πŸ“±
Mobile fix β€” removed red placeholder square from index page card Fix
v8.6 June 25, 2026
Search Engine Phase 1 β€” FTS5 BM25 ranked search across all 78k parts
πŸ”
rb_parts_fts index β€” FTS5 trigram virtual table built over all 78,633 catalogue parts on startup Backend New
πŸ“Š
BM25 ranking β€” parts catalogue search now ranks by relevance (exact part_num first, prefix second, BM25 score third) instead of plain LIKE scan Improved
⚑
Global search parts β€” /api/search now queries 78k rb_parts via FTS before falling back to LUGBULK parts table Improved
πŸ—‚οΈ
/api/catalog/facets β€” new endpoint returning category counts for the active search query; powers live sidebar filter badges New
πŸ”Ž
Sets search BM25 β€” global search sets section now uses sets_fts BM25 ranking instead of LIKE, matching sets page behavior Improved
v8.5 June 20, 2026
Order flow, payments, shipping map, role system & god mode
πŸ›’
Order modal β€” full checkout flow on part detail pages with fee breakdown New
πŸ’³
Payment methods β€” PayPal, Revolut, Card (Stripe), Bank transfer, Cash/local pickup with per-method fee calculation New
πŸ“¦
Shipping options β€” Standard post, DPD Parcelshop, Parcel machine, Local pickup with interactive Leaflet map showing nearby pickup points New
🧾
Fee breakdown β€” Live summary showing subtotal, shipping, payment provider fee, StudsUp fee (1%), import; cash/local shows €0 for platform fees New
⚑
God mode β€” Admin-only floating button, 5-minute timer with countdown, full permissions while active New
πŸ‘₯
Role system β€” admin β€Ί superuser β€Ί power_user β€Ί moderator β€Ί user β€Ί probation hierarchy implemented New
πŸ“„
Real PDF upload β€” Instructions now actually upload files to server via FormData, saved to /uploads/ Fix
πŸ“š
My sets β€” Shows empty state instead of hardcoded demo sets Fix
πŸ†•
LEGO news β€” Home page now shows latest sets from Rebrickable API New
v8.4 June 19, 2026
Upload improvements, API speed fix, color corrections
⚑
API URL fix β€” studsup.eu now routes to Hetzner backend directly, eliminating 30-60s Render cold starts Fix
βœ…
Skip review β€” Admin checkbox to publish instruction uploads immediately without moderation New
🎨
Color corrections β€” 46 BrickLink color CSS values fixed from #cccccc to accurate hex values Fix
πŸ“¦
lugbulk.html β†’ parts.html β€” Page renamed, all references updated Improve
v8.3 June 17, 2026
Hetzner VPS migration, SSL, live backend
πŸš€
Hetzner VPS β€” Migrated from Render to CX23 Helsinki server, FastAPI+uvicorn+nginx stack New
πŸ”’
SSL/HTTPS β€” certbot configured for studsup.eu New
πŸ—„οΈ
SQLite backend β€” 12,658 LUGBULK 2026 parts in persistent database Improve
v8.0 June 13, 2026
Full account settings, real downloads, live camera/mic, currency selector, all fake data removed
βš™οΈProfile settings modal β€” Edit name, handle, location, bio; change email; reset password with strength meter; upload avatar photo (drag & drop) or choose colour; cover image URL New
πŸ“₯Real instruction downloads β€” All 10 sets now link to official LEGO.com PDF booklets that open directly; Rebrickable parts list link; no more fake progress bar Fix
πŸ–ΌοΈReal set images β€” All instruction set cards now display real Rebrickable CDN photos with emoji fallback Fix
πŸ”΄Live camera & microphone β€” Go Live now requests real camera/mic via getUserMedia; individual toggles for camera, microphone, and speaker audio; device labels shown; live timer and simulated viewer count New
πŸ’±Currency selector β€” Parts catalogue now has a top-20 currency dropdown (USD, EUR, GBP, JPY, CNY, CAD, AUD, CHF, INR, BRL, MXN, KRW, SEK, NOK, DKK, PLN, CZK, HUF, TRY, SGD); all prices convert instantly New
πŸ“¦Parts catalogue renamed β€” Removed "LUGBULK 2026 β€”" prefix; page title is now simply "Parts catalogue" Fix
πŸ“ŠPer-page selector β€” New dropdown: 48 / 200 / 500 / 1000 / 2000 / All results per page New
🎨Color filter fixed β€” Root cause: API only loaded 200 of 12,658 parts. Now loads ALL parts in parallel chunks; color names display correctly; "Color 110" = Charcoal Fix
πŸ”‘Admin password updated β€” New secure admin password active for both georgs@studsup.com and admin@studsup.com; old demo1234 still works for testing Fix
v7.1 June 13, 2026
Full mobile responsive β€” hamburger nav, bottom tab bar, per-page breakpoints
πŸ“±Hamburger menu β€” horizontal nav hidden on mobile, replaced with slide-down drawer containing all links New
⬇️Bottom tab bar β€” fixed 5-tab navigation bar at screen bottom: Home / Search / Parts / Profile / AI New
πŸ“Per-page breakpoints β€” all 13 pages get responsive CSS at 768px and 480px: stacked grids, hidden sidebars, full-width buttons New
πŸ”½Modal sheets β€” modals slide up from bottom on mobile instead of appearing centred Improved
βš™οΈFilter FAB on parts catalogue β€” fixed floating button to open/close filters panel on mobile New
v7.0 June 13, 2026
Zero fake data, all buttons fixed, Rebrickable CDN for images
🧹All fake data removed β€” no more 2.4M, 94K, 12K, 340 LUGs; replaced with real DB counts Fix
πŸ”§19 broken alert() buttons fixed β€” now use proper toast(), navigation, or clipboard API Fix
πŸͺFake store names removed β€” BrickMaster_Shop, PartsBarn_EU, BrickMasterPaul replaced with generic labels Fix
πŸ–ΌοΈRebrickable CDN β€” all 12,658 part images and 8 set images updated to cdn.rebrickable.com (works in all browsers) Improved
πŸ”API research β€” BrickLink requires seller OAuth (unusable); Rebrickable free CDN confirmed working; Brickset API returns instruction PDF URLs Improved
v6.2 June 13, 2026
Live deployment + admin accounts + parts catalogue API fix
πŸš€Live deployment started β€” initially on Render.com, migrated to Hetzner VPS in 2026 Improved
πŸ”‘Admin accounts added β€” georgs_bricks (admin) and admin@studsup.com have admin role New
πŸ“¦Parts catalogue API β€” paginated, server-side filtering & sorting Fix
πŸ–ΌοΈPart images β€” Rebrickable CDN (100% coverage for 12,658 LUGBULK parts) Improved
πŸ”Search & API endpoints β€” robust element_id lookup, Rebrickable fallback Fix
⚑Auto-deploy β€” push to GitHub β†’ GitHub Actions β†’ live on Hetzner VPS Improved
v6.0 June 12, 2026
Real backend + full-text search across all categories
πŸ—„οΈSQLite database β€” 4.3 MB, 12,658 parts from LUGBULK_2026.xlsx, FTS5 full-text indexes on all tables Backend
πŸš€FastAPI REST backend β€” 15 endpoints, paginated results, <20ms query time Backend New
πŸ”Global search page rebuilt β€” searches Parts, Sets, Stores, Discounts, Users, LUGs, Streams, Videos simultaneously New
πŸ“¦Parts catalogue β€” removed 3.5 MB JS file, API serves paginated parts on demand Improved
🏷️Discounts as a separate search category with promo codes, min order, validity dates New
⚑Search fallback β€” if backend is not running, search page shows demo results with a warning banner Improved
πŸ“‹This page β€” version history added New
v5.0 June 11, 2026
Stream chat fixed, buy buttons wired, LUGBULK in global nav
πŸ”΄Stream live chat β€” fixed DOM timing bug (autoChat ran before page loaded), Enter key works, user name shown from session Fix
πŸ’°Buy buttons β€” fully wired on part detail page: confirm panel, order confirmation, Add to cart with mini summary New
πŸ”Login-aware buy panel β€” shows sign-in prompt for guests, full buy/cart/wishlist for signed-in users New
πŸͺSeller rows β€” each seller now has a Buy button, clicking selects that seller and updates buy panel New
πŸ“¦Parts catalogue added to main navigation on all pages Improved
πŸ”‘"+ Sell parts" button β€” redirects to login for guests, to profile/shop for signed-in users Fix
v4.0 June 10, 2026
LUGBULK catalogue from real Excel data + LUGBULK history in profile
πŸ“ŠLUGBULK_2026.xlsx imported β€” 12,658 parts with BrickLink price data (sold/available min/avg/max) New
πŸ–ΌοΈPart images β€” lazy-loaded from BrickLink CDN using Element ID + BL Color ID pattern New
πŸ›’Cart panel β€” slide-in cart, qty adjust, CSV export, running total New
πŸ“‹LUGBULK history tab in profile β€” year-by-year order table (2000β†’present), qty input per year, localStorage save, CSV export/import New
🎨147 color swatches in sidebar filter β€” searchable, multi-select New
v3.0 June 10, 2026
Login system, profile setup wizard, LUG public/private separation
πŸ”Login page β€” sign in, register, forgot password, social login (Google/Facebook/Apple), password strength meter New
πŸ‘€Profile setup wizard β€” 4 steps: avatar colour, LEGO interests (12 themes), build skill sliders, privacy toggles New
πŸ”’LUG privacy β€” voting always private/anonymous, full member list members-only, about/events/gallery public New
🌐Nav login-awareness β€” shows user name/avatar when signed in, Sign in button for guests on all pages Improved
🏠Project index (index.html) β€” cards for all pages with features listed New
v2.0 June 9, 2026
LUG governance, voting system, custom roles, postal address
πŸ‘‘LUG governance rules β€” first registrant = Head, one LUG per user, leave/dissolve logic, LUG auto-dissolves when empty New
πŸ—³οΈVoting system β€” elections (52% threshold), polls, rule changes; anonymous votes, active/closed states New
πŸ…Custom roles β€” create/edit/delete roles with granular permissions (8 permission types) New
πŸ“¬Postal address in LUG settings β€” official shipping/letter address, visible only to Head and Ambassador New
πŸ‘‘Head transfer β€” voluntary transfer modal + 52% member vote path New
πŸ“„PDF download on part detail β€” datasheet, XML parts list, CSV, LDR 3D model with progress animation New
πŸ“–Instructions library page β€” 5 tabs, build checker (cross-reference collection vs set parts), download modal New
πŸ”§Shared CSS + JS β€” global variables, nav, buttons, modals, toast, tabs extracted to css/shared.css + js/shared.js Improved
v1.0 June 8, 2026
Initial prototype β€” all core pages designed and built
🏠Homepage β€” hero, category grid, featured listings, feature cards, live stream preview, LUG spotlight, blog feed, footer New
🧱Part detail page β€” price history chart (Chart.js, 4 time ranges), sellers tab, reviews, in-sets tab, color picker, price alert New
πŸ”Search results β€” sidebar filters (category, condition, price, location, rating, color), sort, list/grid view, pagination New
πŸ“¦My Collection β€” parts table with qty editing, sets with ROI, wishlist, build checker, value charts (Chart.js), trade offers New
πŸ›οΈLUG club page β€” cover, stats bar, gallery, events, members grid, tabs, join/follow/leave actions New
πŸŽ₯Live streams page β€” featured stream with live chat, stream grid with live/VOD badges, filters, Go Live button New
✍️User profile + blog β€” cover, stats, blog posts, blog editor, gallery, shop, activity feed, build skill bars New
🎨Design system β€” dark navy + gold LEGO palette, StudsUp brand, responsive layout New
πŸ“„ All pages in this release
🏠
Homepage
home.html
πŸ”
Search
search.html
πŸ“¦
Parts catalogue
parts.html
🧱
Part detail
part-detail.html
πŸ“‹
My Collection
collection.html
πŸ›οΈ
LUG club
lug.html
πŸŽ₯
Streams
stream.html
πŸ‘€
Profile + Blog
profile-blog.html
πŸ“–
Instructions
instructions.html
πŸ”
Sign in
login.html
βš™οΈ
Profile setup
profile-setup.html
πŸ“
Changelog
changelog.html