Skip to content

feat: founders keep their Colosseum submission on the startup form - #117

Merged
thomgabriel merged 5 commits into
mainfrom
feat/startup-submission
Oct 2, 2026
Merged

thomgabriel merged 5 commits into
mainfrom
feat/startup-submission

Conversation

@thomgabriel

@thomgabriel thomgabriel commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Founders can now keep their Colosseum submission up to date on /startup-registration, so the team has one place to follow each project and send feedback (by e-mail, outside the product).

  • Step 4, "Submissão": status, Colosseum project link, description, tracks, prior work, one traction number, repo, pitch and demo videos, team size, whether everyone registered on colosseum.com, and what they want feedback on. Everything is optional and saved on the person's startups row (migration 00067, already applied: additive columns only, same own-row policies). No team is needed.
  • A founder who finished the registration, or already saved a submission, lands on an overview with an "Editar" link for each part instead of step 1. The hero only shows on the first screen.
  • On the Colosseum edition the dashboard has one "Submissão" block, fed by that row, with a checklist of the eight submission items. It replaces the team-based block there; the "Submissão" tab and /h/colosseum-2026/submission lead to step 4 as well. Other editions are unchanged.
  • The "Próximos passos" journey on /pre-registro gets an "Abra seu painel" step once the Colosseum registration is declared. Until now a signed-in person had no link from the landing page to the dashboard: /h/colosseum-2026 redirects to the landing page, and its button goes to /pre-registro.
  • A yellow notice on step 4 and on the dashboard block says "Isto não é a submissão oficial": the form is for feedback only, and the project still has to be sent to the Colosseum hackathon and to the Trilha Brasil side track on Superteam Earn by 12 Oct. Both are linked.
  • The admin startups CSV carries the new columns.

Tested in a real browser at 390 px with two throwaway accounts (27 checks): the full flow from step 1 to a saved submission, a refused bad link, reload and edit, the dashboard block with and without a submission, the tab and the redirect, a person with no startup saving a submission, and RLS through the anon client in both directions. Both accounts were deleted.

Left as is: the 40 existing Colosseum teams keep their rows in submissions (3 marked as sent), but the team submission form is no longer reachable for this edition.

The team needs each startup's submission details in one place to follow it and send feedback. Step 4 of the startup form holds them, a returning founder lands on an overview with an edit link per part, and the Colosseum dashboard links there.
@vercel

vercel Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
hackathon-platform Ready Ready Preview Oct 2, 2026 2:27pm UTC

Request Review

@claude

claude Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Claude finished @thomgabriel's task in 27s —— View job


Verdict: safe to merge once the tracking doc is fixed. One minor finding, no blockers.

  • src/app/(public)/startup-registration/actions.ts:133: the new startup_submission_saved event isn't documented in docs/TRACKING.md and has no edition property. This is an inline comment.

Checked and found no defects:

  • Authorization: saveStartup gates on requireUser and writes with the user-scoped client behind RLS. It doesn't use the service role.
  • Admin export: the startups CSV filters on hackathonId. The header order matches the row order.
  • Migration 00067: re-runnable (add column if not exists) and additive only.
  • Step 4 validation: options, tracks, team size and URLs are validated server-side. A saved row can't have its name blanked, because an empty name is not written.
  • Query errors: go through logQueryError, and .maybeSingle() is used.
  • Dashboard card: only renders for the Colosseum slug.

I read the code only. I didn't run the build or tests.

}

if (step === SUBMISSION_STEP) {
track(state.userId, "startup_submission_saved", {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

startup_submission_saved is a new server event but isn't in docs/TRACKING.md. Events are supposed to keep the documented names and carry edition, and this one does neither. The next person auditing the event table won't find it, and any dashboard built on edition will miss these saves. Add a row next to startup_registered (line 53) and pass edition: COLOSSEUM_SLUG, or whatever the other events use.

@claude

claude Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Claude finished @thomgabriel's task in 11s —— View job


No findings. The earlier TRACKING.md finding is fixed: startup_submission_saved is documented and carries edition.

Checked:

  • Authorization: saveStartup gates on requireUser and writes through the user-scoped client behind RLS. The export filters on hackathonId.
  • Migration 00067: re-runnable and additive only.
  • CSV: header order matches row order, and select("*") includes the new columns.
  • Step 4 handling: the complete intent is limited to the last registration step. The submission_updated_at write and the redirects are correct.

I read the code only. I didn't run the build or tests.

The team-based block and the new startup card said the same thing twice. On this edition the dashboard block, the Submissão tab and the old submission page all lead to step 4 of the startup form, and no team is needed.
@claude

claude Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Claude finished @thomgabriel's task in 11s —— View job


No findings, safe to merge. I checked saveStartup authorization (requireUser, user-scoped client behind RLS, no service role) and migration 00067 (re-runnable, additive). I also checked step 4 validation and the complete intent limit, the tracking event (documented in docs/TRACKING.md, carries edition) and query-error handling. I read the code only and didn't run the build or tests.

A signed-in person had no link from the landing page to the Colosseum dashboard: the edition page redirects to the landing page, whose button goes to /pre-registro. The journey now has an 'Abra seu painel' step once the Colosseum registration is declared.
@claude

claude Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Claude finished @thomgabriel's task in 13s —— View job


No findings, safe to merge. I read the diff and checked these:

  • Authorization: saveStartup gates on requireUser and writes through the user-scoped client behind RLS, with no service role.
  • Migration 00067: re-runnable and additive. startups.name is nullable, so a step 4 save with no existing row doesn't fail.
  • Step 4 validation: options, tracks, team size and URLs are validated server-side. The complete intent is limited to the last registration step.
  • Tracking: startup_submission_saved is in docs/TRACKING.md and carries edition.
  • Query errors: go through logQueryError, and .maybeSingle() is used.

I didn't run the build or tests.

A founder could fill our form and believe the project was submitted. A notice on the form and on the dashboard block says it is for feedback only and links the two real submissions: the Colosseum hackathon and the Trilha Brasil side track.
@claude

claude Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Claude finished @thomgabriel's task in 13s —— View job


No findings, safe to merge. I read the full diff and checked these:

  • Authorization: saveStartup gates on requireUser and writes through the user-scoped client behind RLS, with no service role. The admin CSV export filters on hackathonId.
  • Migration 00067: re-runnable (add column if not exists) and additive only.
  • Step 4 validation: options, tracks, team size and URLs are validated server-side. The complete intent is limited to the last registration step. An empty name is not written, so a step 4 save can't blank it.
  • Tracking: startup_submission_saved carries edition and is documented in docs/TRACKING.md.
  • Query errors: go through logQueryError, and .maybeSingle() is used.
  • Dashboard and redirects: the dashboard card and the /submission redirect only apply to the Colosseum slug. The page keeps force-dynamic.

I read the code only and didn't run the build or tests.

@thomgabriel
thomgabriel merged commit babd806 into main Oct 2, 2026
4 checks passed
@thomgabriel
thomgabriel deleted the feat/startup-submission branch October 2, 2026 14:31
thomgabriel added a commit that referenced this pull request Oct 2, 2026
* fix: a signed-out visitor to a startup form step is sent to login

Since #117 the hero only renders on the first screen, so a signed-out person opening /startup-registration?step=4 from the dashboard or an e-mail got an empty page. They now go to /auth and come back to the same step.

* fix: campaign tags survive the login redirect on the startup form

The redirect dropped the utm parameters, so a click from an e-mail could not be measured for a signed-out person. They now ride on /auth and inside next.

This branch was successfully deployed

1 active deployment
Preview — a2db070a Deployed Oct 2, 2026 by vercel[bot]
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.

1 participant