{"id":31674968,"url":"https://github.com/flatts3000/postsecret","last_synced_at":"2026-05-07T09:36:48.968Z","repository":{"id":317438774,"uuid":"1067401657","full_name":"Flatts3000/PostSecret","owner":"Flatts3000","description":"WordPress-based archive with full-text search, moderation tools, and public browse UI for the PostSecret collection","archived":false,"fork":false,"pushed_at":"2025-09-30T22:17:41.000Z","size":37,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-30T22:28:53.963Z","etag":null,"topics":["archive","docker","elasticsearch","postsecret","wordpress"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Flatts3000.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-30T20:04:14.000Z","updated_at":"2025-09-30T21:23:58.000Z","dependencies_parsed_at":"2025-10-01T10:17:36.208Z","dependency_job_id":null,"html_url":"https://github.com/Flatts3000/PostSecret","commit_stats":null,"previous_names":["flatts3000/postsecret"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Flatts3000/PostSecret","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Flatts3000%2FPostSecret","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Flatts3000%2FPostSecret/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Flatts3000%2FPostSecret/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Flatts3000%2FPostSecret/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Flatts3000","download_url":"https://codeload.github.com/Flatts3000/PostSecret/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Flatts3000%2FPostSecret/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278891748,"owners_count":26063856,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archive","docker","elasticsearch","postsecret","wordpress"],"created_at":"2025-10-08T04:58:15.782Z","updated_at":"2025-10-08T04:58:16.815Z","avatar_url":"https://github.com/Flatts3000.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# PostSecret — WordPress-Native Archive, Search \u0026 Moderation\n\nFast, accessible browsing of the entire PostSecret collection, built on WordPress and MySQL. Public users get full-text search and tag filters; moderators get review queues, publishing controls, taxonomy tools, and an audit trail—privacy and safety first.\n\n**[📋 View Project Kanban Board](https://tree.taiga.io/project/flatts-postsecret/kanban)**\n\n---\n\n## Why this exists\n\nThe current site is mostly chronological; it limits discovery and burdens editorial work. Consolidating public discovery, moderation, and data into a single WordPress stack improves UX, speeds operations, and reduces risk and ongoing complexity.\n\n---\n\n## What’s in the MVP\n\n**Public archive (frontend)**\n\n* Mobile-first browse \u0026 result views; stateful, shareable URLs\n* Full-text search over approved text + multi-select tag facets\n* Accessible detail pages (image, descriptors, extracted text, metadata)\n* Deterministic pagination / “load more”\n* WCAG 2.2 AA and i18n-ready templates\n\n**Admin (editorial \u0026 moderation)**\n\n* Queues: Needs Review, Low Confidence, Flagged, Published\n* Item panel with signals (confidence, labels), approve/publish/unpublish\n* Basic bulk actions with guardrails, taxonomy merge/alias, audit logging\n* Policy thresholds and safe defaults for sensitive content\n\n**Performance \u0026 quality targets**\n\n* p95 search ≤ 600 ms; mobile time-to-first-useful-result ≤ 2.5 s\n* CWV “Good” on archive \u0026 detail pages\n* Public search uptime ≥ 99.9%; ≤ 0.25% 5xx errors\n\n\u003e Phase 2 adds Similarity Search (“find similar”) without re-platforming.\n\n---\n\n## Project principles\n\nProduct-first, single-stack, accessible by default, privacy-preserving, and future-ready (schema and UI accept a similarity module later without upheaval).\n\n---\n\n## Architecture (high level)\n\n* **Single WordPress instance** serves public and admin.\n* **Custom theme \u0026 blocks** power archive, search, detail.\n* **Custom plugin** provides queues, taxonomy governance, audit logs, settings, and backfill/ingest jobs.\n* **MySQL** holds the canonical Secret record (image, approved text, tags, descriptors, moderation state, confidences, provenance) with proper text+tag indexes.\n\nKey flows: public search (text+tags), admin review \u0026 publish, and historical backfill (resumable, checkpointed).\n\n---\n\n## Repository layout\n\n```\n/theme/                # WordPress theme for public archive/search/detail\n/plugins/              # Admin plugin (queues, taxonomy, audit, settings, backfill)\n/docs/                 # Architecture notes, PRD, runbooks\n/tools/                # WP-CLI scripts, backfill helpers (optional)\n/ci/                   # Lint, tests, accessibility/i18n hooks\n```\n\n*Exact names may vary—see ./docs for the authoritative map.*\n\n---\n\n## Getting started (local)\n\n**Prereqs**\n\n* WordPress 6.6+\n* PHP 8.2+ and MySQL 8.x (or MariaDB with comparable features)\n* WP-CLI recommended\n\n**Install**\n\n1. Create a local WordPress site (any preferred method or container).\n2. Copy `/theme/` into `wp-content/themes/postsecret` and activate **PostSecret**.\n3. Copy the relevant plugin directory from `/plugins/` into `wp-content/plugins/` (see `./docs` for the correct directory name), and activate the plugin in WordPress.\n4. Run plugin/theme **migrations** (via WP-CLI command exposed by the plugin, if provided) to create custom tables and indexes.\n5. In **Settings → PostSecret**, confirm policy thresholds and defaults (NSFW/self-harm gates, confidence levels).\n\n**Seed/backfill (pilot)**\n\n* Use WP-CLI/Admin Backfill UI to import a small batch; jobs are resumable, checkpointed, and idempotent with progress reporting and quarantine for hard failures. Start small, watch p95 search latency, then scale throughput.\n\n---\n\n## How search works (MVP)\n\n* Tokenized/stemmed full-text over approved fields + inclusive multi-select tags\n* Sort by relevance (default) or recency; deterministic paging\n* “Zero results” and partial-failure states are user-friendly; server logs capture details\n* Soft rate limiting and server-side policy gates enforce public-safe results\n\n---\n\n## Accessibility \u0026 i18n\n\nAll public and admin UIs target **WCAG 2.2 AA** with keyboard-complete flows, visible focus, and correct roles/labels. All strings are translatable; RTL layouts are respected. Accessibility audits are part of CI.\n\n---\n\n## Safety \u0026 privacy\n\n* Public surfaces show only content that meets policy; sensitive items are gated or excluded\n* No PII displayed publicly; server-side enforcement and conservative defaults\n* All privileged actions require capability checks and nonces; every action is logged (actor, target, timestamp, outcome)\n\n---\n\n## Roadmap (summary)\n\n* **M1** Foundations (repo, envs, CI, scaffolds)\n* **M2** Data model \u0026 migrations (canonical record, audit log, indices)\n* **M3** Public search MVP (archive, search, results/detail, a11y)\n* **M4** Admin review \u0026 moderation (queues, actions, taxonomy, logging)\n* **M5** Backfill pilot (10k) with SLO guardrails\n* **M6** Full historical backfill (~1M)\n* **M7** Launch prep \u0026 cutover\n* **GA** Public launch\n* **M8** Post-launch \u0026 similarity groundwork\n\n---\n\n## Performance \u0026 reliability\n\n* Query hygiene, right indexes, short-TTL result caching\n* Backfill throttles automatically if public p95 search breaches the budget\n* Uptime/error-rate monitors and dashboards with meaningful alerts\n\n---\n\n## Contributing\n\nWe welcome issues and pull requests that improve accessibility, performance, search quality, moderation UX, and documentation.\n\n1. Fork the repo; create a feature branch.\n2. Follow coding standards (PHPCS/WPCS), add tests, and update docs.\n3. Ensure CI is green (lint, tests, accessibility/i18n checks).\n4. Open a PR with a clear description, screenshots (when UI), and risk notes.\n\nPlease also read:\n\n* **Moderation \u0026 taxonomy guidelines** (./docs/guides)\n* **Backfill runbook** (./docs/runbooks)\n\n---\n\n## Code of Conduct\n\nBe kind, be curious, be privacy-minded. We follow a standard community Code of Conduct; see **CODE_OF_CONDUCT.md**.\n\n---\n\n## Security \u0026 responsible disclosure\n\nReport vulnerabilities privately via **SECURITY.md**. Do not open public issues for security problems. Access controls, nonces, sanitization, and server-side policy gates are core to this project; thank you for helping us keep them strong.\n\n---\n\n## License\n\nThis project is licensed under the MIT License. Contributions are accepted under the same license. See [the MIT License](https://opensource.org/licenses/MIT) for details.\n\n---\n\n## Acknowledgements\n\nPostSecret community and contributors; all volunteers helping make the archive more discoverable, safer, and more humane.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflatts3000%2Fpostsecret","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflatts3000%2Fpostsecret","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflatts3000%2Fpostsecret/lists"}