Skip to content

Issue #43: Add sidebar layout to dashboard with nav components#44

Merged
imharrisonking merged 13 commits intoproductionfrom
43-add-sidebar-layout-to-dashboard-with-nav-components
Feb 27, 2026
Merged

Issue #43: Add sidebar layout to dashboard with nav components#44
imharrisonking merged 13 commits intoproductionfrom
43-add-sidebar-layout-to-dashboard-with-nav-components

Conversation

@imharrisonking
Copy link
Contributor

Summary

This PR implements changes for issue #43: Add sidebar layout to dashboard with nav components

Branch: 43-add-sidebar-layout-to-dashboard-with-nav-components

Changes Made

This tracer bullet establishes the architectural pattern for authenticated routes:

  • Created _auth.tsx layout route with:

    • Auth check in beforeLoad (redirects to /login if unauthenticated)
    • Plan-based routing (redirects to /onboarding if user.plan === null)
    • Sidebar layout for /app/* routes with SidebarProvider, AppSidebar, and SidebarInset
  • Created PageContainer component for consistent page layout

  • Created /onboarding page for users without a plan:

    • Standalone page (no sidebar)
    • "Apply for early access" form with name input
    • API stub that logs submissions
  • Updated dashboard and settings pages:

    • Added NavigationHeader at top
    • Wrapped content in PageContainer
    • Removed inline logout buttons (handled by NavUser in sidebar)
    • Removed beforeLoad (now handled by parent _auth.tsx)
  • Made branding prop optional in AppSidebar (no crashes without it)

  • Removed marketing onboarding page (replaced with auth onboarding)

Testing

  • All existing tests pass
  • Manual testing completed
  • npm run typecheck passes

Checklist

  • Code follows project coding standards
  • Tests have been added/updated
  • Documentation updated (if applicable)
  • All CI checks passing

Related Issue

Closes #43

Progress Log

See specs/progress.txt for detailed progress log.

- Create combined _auth.tsx layout route with auth check and plan-based routing
- Add PageContainer component for consistent page layout
- Create onboarding page for users without a plan
- Update dashboard and settings pages to use NavigationHeader and PageContainer
- Make branding prop optional in AppSidebar (no crashes without it)
- Remove marketing onboarding page (replaced with auth onboarding)

This tracer bullet establishes the architectural pattern that all future
authenticated routes will follow.
@imharrisonking imharrisonking added the tracer-bullet End-to-end slice to validate approach label Feb 26, 2026
@imharrisonking imharrisonking linked an issue Feb 26, 2026 that may be closed by this pull request
12 tasks
@github-actions
Copy link

Preview Environment

Property Value
Stage pr-44
Web URL https://pr-44.dev.structa.so
API URL https://api.pr-44.dev.structa.so

Quality checks passed
Deployment successful

This environment will be automatically cleaned up when the PR is closed or merged.

@imharrisonking
Copy link
Contributor Author

The send verification code functionality isn't working properly. Can you inspect the UI and browser console logs to see what's happening?

PR preview environments were failing with 'relation verification does not exist'
because migrations weren't being run after SST deploy. This adds a migration step
to both the PR preview and main deploy workflows.

Fixes verification code 500 error on preview environments.
- Add MAILING_LISTS constant to core/marketing/loops.ts
- Subscribe new users to marketing + product lists on signup
- Create /api/waitlist endpoint for waitlist signups
- Add TanStack Query waitlist mutation client
- Create onboarding layout with Header and side gutters
- Add thank-you page for successful waitlist signup
- Redirect to thank-you page after waitlist submission
- Only show name field if user signed up with email (no OAuth name)
- Add full-screen gutter layout with diamond corners for onboarding routes
- Implement server-side waitlist signup via TanStack Start server functions
- Update user.plan to 'waitlist' on signup and prevent app access for waitlisted users
- Add error state to Button component with shake animation
- Lighten error color in dark mode for better visibility
- Remove Hono client in favor of direct core package calls
- Add updatePlanFromId to UserService
- Add pricing components
Use reloadDocument on HomeIconLink when navigating from authenticated routes
to avoid client-side router route tree conflicts.
Use reloadDocument on HomeIconLink when navigating from authenticated routes
to avoid client-side router route tree conflicts.
- Only redirect to /app if user has a real plan (not waitlist)
- Waitlist users can access login and marketing routes
- This prevents the /app flash when navigating from onboarding to homepage
Now that login middleware properly handles waitlist users
@github-actions
Copy link

Quality Checks Failed

Check Status
TypeScript Failed
Linting Failed
Tests Failed

Please fix the issues above before merging.

- Users with a real plan → /app
- Users on waitlist or no plan → /onboarding
- Previously, waitlist users stayed on login page
@imharrisonking imharrisonking merged commit f52742f into production Feb 27, 2026
4 checks passed
@imharrisonking imharrisonking deleted the 43-add-sidebar-layout-to-dashboard-with-nav-components branch February 27, 2026 21:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

tracer-bullet End-to-end slice to validate approach

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add sidebar layout to dashboard with nav components

1 participant