rubyforgood / rubyforgood/awbw

Story Share portal: anonymous public story submission

Open
#2,144 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement stories
Dominant language
Ruby
Stars
15
Forks
26
Avg merge
12h 42m
Merged PRs (30d)
242

Description

Context

The Story Share portal (/story_shares) now has a signed-in "Share your story" page that reuses the existing StoryIdea flow (see the portal-parity PR). This mirrors the live WordPress site's /share/ form in spirit, but the WP form is fully anonymous — any visitor can submit without an account.

Our StoryIdea model can't be anonymous today: it requires a created_by User and an organization_id drawn from the submitter's own organizations.

What's needed for anonymous submission

  • Add submitter identity columns to story_ideas (e.g. submitter_name, submitter_email, free-text submitter_organization) so a story can be attributed without a User/Organization record.
  • Attribute anonymous submissions to a system/sentinel user (or make created_by optional with a guard).
  • Relax StoryIdeaPolicy#new?/create? to allow guests for the portal route only (keep the admin index/show gated).
  • Spam protection (reCAPTCHA/hCaptcha or honeypot + rate limiting) — the WP form is reCAPTCHA-gated.
  • Consent checkbox matching the WP form's permission language.
  • Moderation: anonymous submissions land in the existing admin review queue; titles are editorial (the WP form has no title field).

Parity notes (from stories.awbw.org research)

  • WP /share/ fields: first/last name, name-display preference (full / first-only / hide), email (not published), organization (free text), state (free text), workshop name, featured image/video, YouTube URL, story body, additional images, category checkboxes (sectors), audience checkboxes, consent checkbox. No title.
  • WP's anonymity is a real privacy bug (full name is in the HTML, hidden with CSS; email is exposed via the open REST API). Our version must handle credit server-side via AuthorCreditable and never render or expose hidden identity.

Out of scope

Signed-in submission already ships in the portal-parity work; this issue covers only the anonymous path.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the /story_shares portal route and inspect StoryIdea, StoryIdeaPolicy, the story_ideas schema, and AuthorCreditable; compare the listed fields with the WordPress /share/ form and its privacy notes. Map the anonymous identity, guest authorization, spam protection, consent, and moderation requirements, with completion requiring the anonymous path to preserve privacy and reach the existing admin review queue.

Written by the indexing model from the issue text.

Assessment

Tech stack
ruby
Domain
content, database, full-stack, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.