simple-web-app

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

DateCommit messageAuthorFiles+-
2026-06-27 20:45perf: use composite primary keys for vote and story_categorySilas Brack3+88-0
2026-06-14 13:41fix: write seed SQL to temp file to avoid arg length limitSilas Brack1+16-12
2026-06-14 13:19fix: handle multiple nix output paths in bench.shSilas Brack1+1-1
2026-06-14 13:18add bench.sh for repeatable read/write benchmarksSilas Brack1+85-0
2026-06-14 13:03perf: use RETURNING * for create_story, create_comment, create_userSilas Brack1+22-24
2026-06-14 12:50fix: update score display when votingSilas Brack2+33-5
2026-06-14 12:35perf: read vote score on writer connection, remove separate read round-tripSilas Brack2+20-28
2026-06-14 11:54refactor: dedicated async DB thread pool, remove spawn_blockingSilas Brack13+618-605
2026-06-14 10:18perf: add semaphore on password hashing to prevent DB read starvationSilas Brack2+58-25
2026-06-14 07:08fix: replace unsafe UnsafeCell with safe RefCell for thread-local connectionsSilas Brack1+340-326
2026-06-13 22:05feat: reject non-selective search queries via FTS match countSilas Brack4+39-2
2026-06-13 13:59fix: set created_at in all INSERT statementsSilas Brack1+9-9
2026-06-13 13:44refactor: remove inline JS for tag checkboxesSilas Brack3+11-40
2026-06-13 13:31feat: epoch integer timestamps, drop chronoSilas Brack9+238-257
2026-06-13 13:15chore: reduce static asset cache TTL to 1 daySilas Brack1+1-1
2026-06-13 13:11fix: HTML validation, meta description, clean up flakeSilas Brack2+4-11
2026-06-13 13:08docs: remove directory listing from READMESilas Brack1+0-8
2026-06-13 12:56docs: add migration guidelines to READMESilas Brack1+70-3
2026-06-13 12:53feat: replace JWTs with opaque session tokensSilas Brack16+99-259
2026-06-13 11:43refactor: use ADDR and SMTP_ADDR env vars directlySilas Brack2+9-22
2026-06-13 11:35refactor: use addr/smtp_addr instead of separate host+port fieldsSilas Brack3+10-8
2026-06-13 11:34refactor: separate Config from AppStateSilas Brack10+28-37
2026-06-13 11:30refactor: flatten db module into database.rsSilas Brack8+97-96
2026-06-13 11:27refactor: move version bumps into migration SQL filesSilas Brack4+27-55
2026-06-13 11:19test: verify foreign_keys is ON after migrationsSilas Brack1+14-0
2026-06-13 11:18fix: simplify migrations, remove tracing dep, fix dead codeSilas Brack6+23-62
2026-06-13 11:14chore: remove dead PRAGMA foreign_keys=ON from migration runnerSilas Brack1+0-4
2026-06-13 11:12test: add migration version bump testsSilas Brack1+63-0
2026-06-13 11:11fix: bump migration version inside the transactionSilas Brack2+37-21
2026-06-13 11:07refactor: let migrations manage their own transactionsSilas Brack2+23-24
2026-06-13 11:04feat: migrate all tables to STRICT modeSilas Brack4+179-70
2026-06-13 10:43refactor: generate JWT secret randomly on startupSilas Brack2+5-2
2026-06-13 10:41refactor: require all env vars, update .env.example and READMESilas Brack3+80-70
2026-06-13 10:05perf: use prepare_cached for all queries, HashMap for enrichmentSilas Brack2+27-21
2026-06-13 10:00perf: thread-local reader connections, cap blocking threads to core countSilas Brack2+29-46
2026-06-12 21:28perf: separate reader pool and writer connectionSilas Brack1+74-68
2026-06-12 21:20perf: add SQLite performance PRAGMAs, merge feed db_query callsSilas Brack2+16-12
2026-06-12 21:01perf: replace lettre with hand-rolled SMTP clientSilas Brack4+58-768
2026-06-12 20:24perf: replace r2d2 with hand-rolled connection poolSilas Brack3+80-172
2026-06-12 20:18chore: remove thiserror, hand-impl Display + ErrorSilas Brack3+20-11
2026-06-12 20:17chore: remove unused deps (serde_json, uuid)Silas Brack3+11-7
2026-06-12 20:00chore: remove manual gzip, let nginx handle compressionSilas Brack2+5-31
2026-06-12 19:51perf: use system SQLite instead of bundledSilas Brack3+3-2
2026-06-12 19:26refactor: move migrations to SQL files, update READMESilas Brack4+180-172
2026-06-12 19:22chore: remove old seeds, scripts, guests, and schemasSilas Brack13+0-1696
2026-06-12 19:21chore: remove leftover TrailBase filesSilas Brack10+0-390
2026-06-12 18:51feat: add migration system, email verification, and data migration scriptSilas Brack11+971-201
2026-06-12 18:22feat: replace TrailBase with direct SQLite accessSilas Brack23+1913-3170
2026-06-12 17:49perf: share reqwest connection pool across all TrailBase clientsSilas Brack10+96-239
2026-06-11 17:43perf: add timing instrumentation to story and feed handlersSilas Brack2+40-1
2026-06-11 13:24fix: use data-init instead of data-on:load for SSE connectionSilas Brack2+2-2
2026-06-11 12:55fix: add X-Accel-Buffering header to SSE responses for nginxSilas Brack2+10-4
2026-06-11 12:43feat: re-implement comment SSE bridge with initial event diagnosticSilas Brack5+149-43
2026-06-11 11:43fix: replace broken SSE bridge with EventSource + Datastar @getSilas Brack5+43-124
2026-06-11 10:38feat: add Datastar loading indicators to interactive elementsSilas Brack6+22-6
2026-06-11 10:36feat: replace vanilla JS comment updates with Datastar SSE streamSilas Brack5+123-39
2026-06-11 10:33fix: use proper SSE format for settings tabs, remove manual history.pushStateSilas Brack3+10-17
2026-06-11 10:32fix: use proper SSE format and outer morph for search responsesSilas Brack2+4-9
2026-06-11 10:31fix: use proper SSE format and outer morph for vote responsesSilas Brack2+8-14
2026-06-11 10:30feat: add SSE helper module for Datastar-compliant responsesSilas Brack2+36-0
2026-06-10 20:52feat: add validation-enhancer web component for inline form validationSilas Brack9+472-37
2026-06-10 20:49refactor: use enum for story fragment query parameterSilas Brack1+8-2
2026-06-10 20:40refactor: consolidate comments fragment into story handlerSilas Brack3+19-25
2026-06-09 18:07feat: add /api/* reverse proxy for local developmentSilas Brack3+56-2
2026-06-09 18:07fix: prevent vote race condition with try-then-catch patternSilas Brack1+48-65
2026-06-09 18:07feat: replace full page reload with targeted comment refresh on SSESilas Brack2+12-1
2026-06-09 18:07fix: batch-fetch comment authors and tag queries to eliminate N+1Silas Brack6+214-66
2026-06-09 18:07chore: remove dead HTMX codeSilas Brack2+1-52
2026-06-08 20:36revert: go back to page reload for SSE commentsSilas Brack4+4-60
2026-06-08 20:33feat: swap comments via fetch instead of full page reloadSilas Brack4+60-4
2026-06-08 20:27feat: replace HTMX with DatastarSilas Brack14+89-84
2026-06-08 16:41fix: enable subscriptions on comment record APISilas Brack1+1-0
2026-06-08 16:38fix: filter SSE subscription by story_idSilas Brack1+2-9
2026-06-08 15:50feat: add realtime comments via SSE subscriptionSilas Brack1+17-1
2026-06-07 21:09perf: batch story enrichment via WASM guest /enrich endpointSilas Brack4+146-30
2026-06-07 21:07fix: use IF NOT EXISTS in index migrationSilas Brack1+2-2
2026-06-07 21:06perf: add indices on story.published and story.scoreSilas Brack1+2-0
2026-06-07 21:03perf: drop ORDER BY rank from FTS5 searchSilas Brack2+0-1
2026-06-07 20:48docs: trim README to stable content onlySilas Brack1+13-78
2026-06-07 20:47docs: update README with current stack, principles, and structureSilas Brack1+71-61
2026-06-07 20:03chore: remove dead code and stale filesSilas Brack7+6-141
2026-06-07 19:55fix: revert realtime polling, add error logging for API failuresSilas Brack6+16-10
2026-06-07 19:50fix: replace unwrap() panic in reply form with proper errorSilas Brack1+2-1
2026-06-07 19:48feat: add realtime comment polling via HTMXSilas Brack5+91-34
2026-06-07 19:43git: update gitignoreSilas Brack1+1-2
2026-06-07 19:42fix: remove accidentally committed guest build artifactsSilas Brack930+1-2982
2026-06-07 19:42feat: replace rusqlite with WASM guest for FTS5 searchSilas Brack939+4075-111
2026-06-07 19:29chore: regenerate types from trailbase schema via quicktypeSilas Brack7+220-24
2026-06-07 19:03feat: add porter stemming to FTS5 searchSilas Brack1+34-0
2026-06-07 18:48chore: update generate-types.sh for current schemaSilas Brack1+12-7
2026-06-07 18:35chore: fix source URL, add seed scriptSilas Brack2+97-1
2026-06-07 18:29feat: clean up design and remove duplicate sort linksSilas Brack4+316-496
2026-06-07 18:21feat: serve htmx and preload.js locally instead of CDNSilas Brack4+29-2
2026-06-07 18:14fix: add missing slash in resend verification URLSilas Brack1+2-1
2026-06-07 18:11feat: add resend verification email pageSilas Brack5+82-1
2026-06-07 17:30chore: upgrade trailbase from v0.23.0 to v0.28.3Silas Brack1+2-2
2026-06-07 17:09feat: use SQLite FTS5 for search instead of LIKESilas Brack5+113-9
2026-06-07 16:23feat: restore tag selection using hidden field with JSSilas Brack3+53-6
2026-06-07 16:17fix: add URL validation error message and log profile creation failuresSilas Brack2+18-3
2026-06-07 16:15fix: change URL field from type=url to type=textSilas Brack2+2-2
2026-06-07 16:09fix: remove tags from form structs to fix submissionSilas Brack1+2-17
2026-06-07 16:03fix: include user_id in profile creation and auto-create on loginSilas Brack2+16-1
2026-06-07 15:58fix: use OR for target_id filters in vote lookupSilas Brack1+16-15
2026-06-07 15:55fix: convert URL-safe base64 user_id to standard base64Silas Brack1+4-1
2026-06-07 15:50feat: add story editing and tag selectionSilas Brack9+308-13
2026-06-07 15:44fix: filter votes by user_id to show correct voted stateSilas Brack1+6-0
2026-06-07 13:31refactor: reuse shared reqwest client for registrationSilas Brack3+4-3
2026-06-07 12:32fix: show success page instead of error for email verificationSilas Brack2+26-21
2026-06-07 12:28fix: handle 303 redirect from trailbase registrationSilas Brack1+9-4
2026-06-07 12:25feat: implement user registration via trailbase APISilas Brack6+231-5
2026-04-25 20:08chore: remove debug logging and add htmx preloadingSilas Brack3+13-44
2026-04-25 16:58fix: resolve FTS5 content table and vote auth issuesSilas Brack2+60-8
2026-04-25 16:33test: remove user_id from vote to check auto-fillSilas Brack1+0-6
2026-04-25 15:55debug: log vote JSON payloadSilas Brack1+3-3
2026-04-25 15:53debug: use eprintln for loggingSilas Brack1+9-9
2026-04-25 15:49debug: add logging for user_id extraction and create operationsSilas Brack1+36-4
2026-04-25 13:45fix: manual JWT parsing for user_id extractionSilas Brack2+78-10
2026-04-25 13:10fix: include user_id/created_by in create requestsSilas Brack1+42-2
2026-04-25 13:03fix: use client.user().sub for vote user_idSilas Brack4+4-22
2026-04-25 12:35fix: use autofill_missing_user_id_column for vote user_idSilas Brack1+1-1
2026-04-25 12:33fix: use TrailBase autofill for vote user_idSilas Brack3+4-14
2026-04-25 11:17fix: search wildcards and vote authenticationSilas Brack4+41-5
2026-04-25 11:03feat: refactor to HN/Lobsters-style link aggregatorSilas Brack41+3041-612
2026-04-25 10:19refactor: remove tower-http compression layerSilas Brack3+2-80
2026-04-25 10:01feat: implement proper auth with trailbase-clientSilas Brack8+2733-663
2026-04-25 09:25fix: embed static files for Nix deploymentSilas Brack3+44-19
2026-04-25 09:20fix: correct TrailBase API filter syntax and response handlingSilas Brack1+9-5
2026-04-25 09:17fix: use cursor instead of total_count for TrailBase paginationSilas Brack1+1-1
2026-04-25 09:08refactor: remove bloated dependenciesSilas Brack12+552-2331
2026-04-22 11:20feat: generate Rust types from Trailbase schemaSilas Brack8+145-17
2026-04-22 06:19fix: correct Trailbase API response format and migration namingSilas Brack4+15-18
2026-04-21 20:28feat: add Trailbase backend for authenticationSilas Brack24+1355-870
2026-04-21 20:01fix: embed static files with rust-embedSilas Brack3+104-16
2026-04-21 19:55fix: serve pre-compressed static filesSilas Brack2+1-1
2026-04-21 19:31refactor: apply mkv development philosophySilas Brack13+303-162
2026-04-20 19:46refactor: migrate from Python/Starlette to Rust/AxumSilas Brack56+4098-3688
2025-10-15 15:12test: random fixesSilas Brack4+173-92
2025-10-04 21:45style: format HTML with prettierSilas Brack10+847-382
2025-10-04 17:03fix: loading more dataSilas Brack2+7-1
2025-10-04 14:58chore: whitespaceSilas Brack1+0-1
2025-10-04 14:57refactor: use url_forSilas Brack6+23-23
2025-10-04 11:12test: improve testsSilas Brack1+5-2
2025-10-04 11:08test: improve testsSilas Brack1+7-0
2025-10-04 10:45test: improve testsSilas Brack1+30-4
2025-10-04 10:45fix: settings tab loadingSilas Brack4+18-14
2025-10-04 10:08feat: disable load more button when we run out of content to showSilas Brack3+8-4
2025-10-04 09:31refactor: improve settings template usageSilas Brack1+6-8
2025-10-04 09:30test: add locustfileSilas Brack1+7-0
2025-10-04 09:30docs: add comments for dependenciesSilas Brack1+2-0
2025-10-04 07:51refactor: refactor main pageSilas Brack1+16-10
2025-10-03 21:12test: fix testing and add testsSilas Brack7+963-108
2025-10-03 10:51fix: load more after filteringSilas Brack1+1-1
2025-10-02 17:23feat: improve news cardSilas Brack1+21-22
2025-10-02 17:15chore: oopsSilas Brack1+1-1
2025-10-02 17:15chore: improve local loggingSilas Brack3+55-5
2025-10-02 15:57feat: preload settingsSilas Brack1+6-6
2025-10-02 15:53feat: enable hx-preloadSilas Brack6+16-6
2025-10-02 15:23fix: github linkSilas Brack1+1-1
2025-10-02 15:21fix: load more when filtering category, change formattingSilas Brack3+5-3
2025-10-02 15:01feat: enable filtering for categorySilas Brack5+158-15
2025-10-02 10:40fix: make category loading much fasterSilas Brack1+3-6
2025-10-02 07:32fix: use of tables from migrationSilas Brack2+12-8
2025-10-01 20:37feat: add newsSilas Brack17+327-178
2025-10-01 10:51feat: improve mobile tabsSilas Brack4+44-25
2025-10-01 09:08feat: start implementing kagi news cloneSilas Brack7+229-54
2025-09-30 10:26chore: remove basedpyrightSilas Brack1+0-2
2025-09-30 10:26fix: entrypoint in nixosSilas Brack1+2-1
2025-09-29 21:27docs: clean up, fix documentationSilas Brack2+27-38
2025-09-29 21:03refactor: fix entrypoing fileSilas Brack3+11-7
2025-09-29 20:57feat!: major refactoring, improve flake support (#1)Silas Brack19+603-205
2025-09-28 13:10build: set up for Mac OSSilas Brack2+149-145
2025-09-27 16:18refactor: move static files into packageSilas Brack9+35-16
2025-09-27 13:51feat!: initial commitSilas Brack20+1476-0