search for standard sites pub-search.waow.tech
search zig blog atproto
11
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: add greengale.app platform support

- add basePath detection migration for greengale.app/*
- add greengale to frontend platform filter and config
- update docs and README
- ~29 existing documents will be backfilled on deploy

馃 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

zzstoatzz 9529b216 bb767e79

+24 -4
+2 -2
README.md
··· 2 2 3 3 by [@zzstoatzz.io](https://bsky.app/profile/zzstoatzz.io) 4 4 5 - search ATProto publishing platforms ([leaflet](https://leaflet.pub), [pckt](https://pckt.blog), [offprint](https://offprint.app), and others using [standard.site](https://standard.site)). 5 + search ATProto publishing platforms ([leaflet](https://leaflet.pub), [pckt](https://pckt.blog), [offprint](https://offprint.app), [greengale](https://greengale.app), and others using [standard.site](https://standard.site)). 6 6 7 7 **live:** [pub-search.waow.tech](https://pub-search.waow.tech) 8 8 ··· 35 35 GET /health # health check 36 36 ``` 37 37 38 - search returns three entity types: `article` (document in a publication), `looseleaf` (standalone document), `publication` (newsletter itself). each result includes a `platform` field (leaflet, pckt, offprint, or other). tag and platform filtering apply to documents only. 38 + search returns three entity types: `article` (document in a publication), `looseleaf` (standalone document), `publication` (newsletter itself). each result includes a `platform` field (leaflet, pckt, offprint, greengale, or other). tag and platform filtering apply to documents only. 39 39 40 40 **ranking**: results use hybrid BM25 + recency scoring. text relevance is primary, but recent documents get a boost (~1 point per 30 days). the `since` parameter filters to documents created after the given ISO date (e.g., `since=2025-01-01`). 41 41
+6
backend/src/db/schema.zig
··· 169 169 \\AND publication_uri IN (SELECT uri FROM publications WHERE base_path LIKE '%offprint.app%' OR base_path LIKE '%offprint.test%') 170 170 , &.{}) catch {}; 171 171 172 + client.exec( 173 + \\UPDATE documents SET platform = 'greengale' 174 + \\WHERE platform IN ('other', 'unknown') 175 + \\AND publication_uri IN (SELECT uri FROM publications WHERE base_path LIKE '%greengale.app%') 176 + , &.{}) catch {}; 177 + 172 178 // URL path field for documents (e.g., "/001" for zat.dev) 173 179 // used to build full URL: publication.url + document.path 174 180 client.exec("ALTER TABLE documents ADD COLUMN path TEXT", &.{}) catch {};
+7
docs/standard-search-planning.md
··· 179 179 - platform detected via basePath (`*.offprint.app`, `*.offprint.test`) 180 180 - now fully supported alongside leaflet and pckt 181 181 182 + ### greengale.app - NOW INDEXED (2026-01-22) 183 + - writes `site.standard.document` records 184 + - has `textContent` field (pre-flattened) 185 + - platform detected via basePath (`greengale.app/*`) 186 + - ~29 documents indexed at time of discovery 187 + - now fully supported alongside leaflet, pckt, and offprint 188 + 182 189 ### implication for architecture 183 190 184 191 two paths:
+9 -2
site/index.html
··· 504 504 <div id="results" class="results"> 505 505 <div class="empty-state"> 506 506 <p>search atproto publishing platforms</p> 507 - <p style="font-size:11px;margin-top:0.5rem"><a href="https://leaflet.pub" target="_blank">leaflet</a> 路 <a href="https://pckt.blog" target="_blank">pckt</a> 路 <a href="https://offprint.app" target="_blank">offprint</a> 路 <a href="https://standard.site" target="_blank">other</a></p> 507 + <p style="font-size:11px;margin-top:0.5rem"><a href="https://leaflet.pub" target="_blank">leaflet</a> 路 <a href="https://pckt.blog" target="_blank">pckt</a> 路 <a href="https://offprint.app" target="_blank">offprint</a> 路 <a href="https://greengale.app" target="_blank">greengale</a> 路 <a href="https://standard.site" target="_blank">other</a></p> 508 508 </div> 509 509 </div> 510 510 ··· 658 658 // offprint is in early beta, URL pattern unknown 659 659 docUrl: null 660 660 }, 661 + greengale: { 662 + home: 'https://greengale.app', 663 + label: 'greengale.app', 664 + // greengale uses basePath + path pattern 665 + docUrl: null 666 + }, 661 667 other: { 662 668 home: 'https://standard.site', 663 669 label: 'other', ··· 794 800 { id: 'leaflet', label: 'leaflet' }, 795 801 { id: 'pckt', label: 'pckt' }, 796 802 { id: 'offprint', label: 'offprint' }, 803 + { id: 'greengale', label: 'greengale' }, 797 804 { id: 'other', label: 'other' }, 798 805 ]; 799 806 const html = platforms.map(p => ` ··· 879 886 resultsDiv.innerHTML = ` 880 887 <div class="empty-state"> 881 888 <p>search atproto publishing platforms</p> 882 - <p style="font-size:11px;margin-top:0.5rem"><a href="https://leaflet.pub" target="_blank">leaflet</a> 路 <a href="https://pckt.blog" target="_blank">pckt</a> 路 <a href="https://offprint.app" target="_blank">offprint</a> 路 <a href="https://standard.site" target="_blank">other</a></p> 889 + <p style="font-size:11px;margin-top:0.5rem"><a href="https://leaflet.pub" target="_blank">leaflet</a> 路 <a href="https://pckt.blog" target="_blank">pckt</a> 路 <a href="https://offprint.app" target="_blank">offprint</a> 路 <a href="https://greengale.app" target="_blank">greengale</a> 路 <a href="https://standard.site" target="_blank">other</a></p> 883 890 </div> 884 891 `; 885 892 }