Skip to content

feat(hardware): let owners move design-stage hardware projects to Fabricate - #1611

Merged
qcoral merged 5 commits into
hackclub:mainfrom
destroyer796:fabricate-transfer
Nov 10, 2026
Merged

qcoral merged 5 commits into
hackclub:mainfrom
destroyer796:fabricate-transfer

Conversation

@destroyer796

@destroyer796 destroyer796 commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor
image image image

what's this do?

Lets owners move a design-stage hardware project over to Fabricate, Hack Club's newest hardware program. It only works while nothing about the project is waiting on (or blocked by) a Stardance reviewer.

  • Button: a green "Move to Fabricate" button sits beside Record a timelapse / Post a devlog. It opens a confirmation popup in Fabricate's logo and type that explains the move and links Fabricate's overview docs.
  • Confirming: Stardance records a Project::FabricateTransfer and sends the owner to fabricate.hackclub.com/imports/stardance/:id. Stardance never calls Fabricate and needs no secrets or config.
  • Fabricate's side: it signs the owner in with Hack Club, then reads the project and their devlogs from Stardance's public API with its own Stardance API key. It imports only if the project reports a transfer whose owner Slack ID matches the person signed in. Following the link again just opens the imported project.
  • Who can move a project: only an owner who is signed in with Hack Club and ID-verified. The public API only shows devlogs by verified authors.
  • Which projects: hardware projects in the design stage, with no mission or a hardware mission (Hackpad, BLARE, …), that Stardance has never funded or shipped. An undone review can put a funded or shipped project back in design; production has 56 of those, and they're excluded. Hardware projects on a software mission (about 350) are excluded too, since that mission's prizes don't carry over. That leaves roughly 13k projects in production (about 9.3k on Hackpad and 700 on BLARE), before the owner checks above.
  • After the move, the project stays on Stardance but is locked: it can't request funding, change stage, or ship. A returned funding review can't be undone back into the queue either. So one design can't be funded by both programs. The button becomes "View on Fabricate".
  • Public API additions (documented in public/openapi.yaml, with nothing extra fetched per item):
    • Projects gain fabricate_transfer. It's null until the project moves; after that it holds moved_at and the owner's id, slack_id, display_name and bio.
    • Devlogs gain author_id.
  • Small fixes on the way:
    • The project actions row now wraps instead of pushing the last button past the edge. With five buttons, "Submit for funding" used to overflow.
    • A locked design-stage project's stage toggle used to always highlight "Build". It now highlights the real stage.

Before deploy: this adds one migration, project_fabricate_transfers (project, user). The Fabricate side is already live (hackclub/fabricate@327e511, deployed to fabricate.hackclub.com with its Stardance API key set), so this can ship whenever it's reviewed.

show it works

Tested end to end against a local Fabricate, for both a person new to Fabricate and one with an existing account. Moving a project redirects to /imports/stardance/:id, and Fabricate asks for Hack Club sign-in. Once signed in as the owner, the project is imported with its banner and devlogs (images copied over). For someone new to Fabricate, it also takes their Stardance name and bio. The Stardance project then shows "View on Fabricate" with the funding button gone.

Rubocop and erb_lint are clean on the changed files.

ai?

Claude code

destroyer796 and others added 2 commits November 9, 2026 13:58
…ricate

Owners of design-stage hardware projects that aren't waiting on any review
get a green "Move to Fabricate" button beside Record a timelapse / Post a
devlog. A confirmation popup (Fabricate's logo and type) explains the move
and links Fabricate's overview docs. Confirming sends the project, the
owner's name and bio and the devlogs they posted to Fabricate's
/imports/stardance, signed with FABRICATE_IMPORT_SECRET, records a
Project::FabricateTransfer and sends the owner to the new Fabricate project.

Moved projects stay on Stardance but can't request funding, change stage,
ship, or have a funding review undone back into the queue, so one design
can't be funded by both programs. Only Hack Club-linked owners can move a
project, since Fabricate trusts the email it is sent.

The project actions row now wraps instead of pushing the last button off
the edge, and a locked design-stage project's stage toggle highlights
Design rather than always Build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbGbYWLS3Kapvu7Ny5YaKr
…them

Stardance no longer calls Fabricate or holds a shared secret. Confirming
"Move to Fabricate" now just records the Project::FabricateTransfer (which
locks the project here, as before) and sends the owner to Fabricate's
/imports/stardance/:id. Fabricate signs them in with Hack Club and reads the
project and their devlogs from our public API, importing it only when the
project reports a transfer whose owner Slack ID matches theirs.

- Project API gains fabricate_transfer (null until moved; then moved_at and
  the owner's id, slack_id, display_name and bio), devlog API gains
  author_id, both preloaded and documented in openapi.yaml.
- Moving needs an ID-verified owner, since the public API only shows
  devlogs by verified authors.
- Drops FabricateService and the fabricate_project_id column (the migration
  hasn't shipped, so it's edited in place).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbGbYWLS3Kapvu7Ny5YaKr
@destroyer796
destroyer796 marked this pull request as ready for review November 9, 2026 19:30
…m moving to Fabricate

An undone review can put a project Stardance already funded or shipped back
in the design stage; production has 56 such projects that showed the button.
They can no longer move. Hardware projects attached to a software mission
(about 350 in production) can't either, since that mission's prizes don't
carry over. Hackpad, BLARE and other hardware-mission projects still can.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbGbYWLS3Kapvu7Ny5YaKr

@qcoral qcoral left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please remove the tests! they should either be hand-written or not included in the PR

destroyer796 and others added 2 commits November 10, 2026 10:48
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbGbYWLS3Kapvu7Ny5YaKr
Keeps both conditions where hackclub#1615 closed funding after Stardance ended and
this branch hides funding on projects moved to Fabricate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XbGbYWLS3Kapvu7Ny5YaKr
@destroyer796

Copy link
Copy Markdown
Contributor Author

My bad, should be removed now

@destroyer796
destroyer796 requested a review from qcoral November 10, 2026 17:04
@qcoral
qcoral added this pull request to the merge queue Nov 10, 2026
Merged via the queue into hackclub:main with commit 72a5d7d Nov 10, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants