SignalStack
Where the money flows · what the market says
backend · postgres   ·   11.589 listings
Backend
POSTGRES
live DB
Total listings
11.589
across all sources
Active sources
5 / 5
see table
Schema · dict version
v1 · v1
bump migrations on changes

01Source health overview

counts per source · last posted_at · budget disclosure

SourceListingsDEENw/ BudgetLast postedArchiveStatus
GULP.de4.4364.2511853.759 (85%)2026-05-0418 mo✓ active
Freelance.de3.0912.9731182.417 (78%)2026-05-046 mo✓ active
Twago.de1.0461.00442765 (73%)2026-05-0412 mo✓ active
Junico.de1.7931.711821.687 (94%)2026-05-046 mo✓ active
eVergabe / DTAD1.2231.164591.126 (92%)2026-05-0460 mo✓ active

02Operational notes

what runs autonomously

  • Cron: worker container runs Sun 03:00 ingest, Sun 04:30 stats refresh.
  • Idempotent: re-running ingest is safe — content_hash dedups raw_blob, listing.id dedups listings.
  • Per-source isolation: one source failing does not block others; failure recorded in source_health.
  • Watermarks: resume from last posted_at on restart.
  • Quarantine: parse errors land in quarantine, retryable from this admin section in Phase 6.
  • Backups: weekly pg_dump to mounted volume, optional offsite S3-compatible.
  • Health endpoint: worker /health on :3001; web /health on :3000; Coolify probes both.
  • Source link preserved: every listing keeps its source_url for click-to-original drillthrough.
  • raw_blob retention: indefinite — enables dictionary-version replay over full history.

03Phase 4 — admin tools (in roadmap)

quarantine, replay, dictionary editor, audit · scaffolded next

  • Quarantine browser: failed parses with raw_blob preview + retry button.
  • Replay: pick raw_blob → re-run current parser → diff vs stored.
  • Dictionary editor: add/remove terms, triggers term_hits re-derive.
  • Term audit: TP/FP labelling, per-term precision metric, sub-0.7 flagged.
SignalStack · 5 yrs · 5 sources · self-running weekly · postgres backend