Fix auth, error handling, and link/UI bugs across app - #20
Closed
abayomicornelius wants to merge 89 commits into
Closed
Fix auth, error handling, and link/UI bugs across app#20abayomicornelius wants to merge 89 commits into
abayomicornelius wants to merge 89 commits into
Conversation
Next.js frontend for StellarTickets. Every on-chain action goes through a non-custodial build-XDR -> Freighter-sign -> submit-XDR flow against the backend, never holding a user's private key.
The previous look (flat single-accent dark theme, checkmark-in-ticket mark, thin two-section landing page) was a rerun of the same template used on the last project. Reworks: - New mark: a proper ticket-stub silhouette with tear-line notches and a four-point "stellar" sparkle, gradient-filled. - New palette: violet -> magenta -> amber sunset gradient over a near-black base, replacing the flat single-accent look. - New type pairing: Space Grotesk for headings, Inter for body. - Landing page rebuilt with real depth: a ticket mockup visual, a stats strip, a 4-step on-chain lifecycle timeline, industry icons, a security highlights section, and an FAQ. - Added /about and /security as real content pages (not stubs), and restructured the footer to link to them.
Studied the reference site's shipped Tailwind markup directly (it's a Next.js app, so the utility classes are readable in the served HTML) and adapted its strongest patterns with our own content and gradient: - Seamless CSS-only marquee rows (industries, then our stack) with an edge fade-mask, matching their tech-stack ticker. - A pill CTA button whose gradient fill wipes in on hover. - A mix-blend-mode cursor dot that layers on top of the real cursor. - A canvas particle-network background in the hero. - An "Attendees / Organizers" pill tab switcher with a sliding active indicator, directly analogous to their Contributor/Maintainer toggle. - A giant viewport-relative statement section and a full-bleed gradient CTA block, mirroring their scale-driven section breaks. All copy and data stayed ours; only the layout/interaction patterns and Tailwind technique were borrowed.
Replace the ticket-stub icon with a simpler, more legible mark: a rounded-square badge in the brand gradient with a bold "ST" wordmark. Built from inline styles (not Tailwind classes) so it renders identically in the browser and through icon.tsx/opengraph-image.tsx, which only understand inline styles. Also synced --gradient-sunset's angle to match the logo's BRAND_GRADIENT exactly (same colors and stops already, angle was 115deg vs 135deg) so the mark and the rest of the site's gradient usage are pixel-identical, not just close.
Logo: solid gradient-filled ticket-stub shape (not just an outline) with a dashed tear-line, a sparkle accent, and bold italic "ST" lettering across the body — closer to the reference the user shared. The shape is SVG (paths render fine through satori) but the "ST" text is a plain positioned HTML span layered on top, since satori doesn't support SVG <text> — confirmed by a failed build before this fix. Copy: removed "Powered by Stellar" and "non-custodial" as marketing taglines/headline claims (hero pill, footer, page metadata, OG image, stats strip, a feature card on /about, and a FAQ entry), replacing each with more specific, less generic phrasing. Left the /security page's substantive technical explanation of the signing flow alone — that's documentation, not a marketing hook.
- --background is now #000000 instead of a purple-tinted near-black, and the radial-gradient glow overlays on body/opengraph-image are gone so the page reads as genuinely black, not a dark tint. - Removed CustomCursor (the mix-blend-mode dot that followed the pointer and grew over interactive elements) from the layout and deleted the component; native cursor behavior only now.
Keep the industries marquee; drop the second row listing the tech stack (Stellar, Soroban, Freighter, Next.js, etc.).
- Detached from the viewport edge (top-4, px-4 container) with its own rounded-full border, background, and shadow, instead of the previous edge-to-edge bar with a bottom border. - Get started moved to a pill button at the end of the link row to match the capsule shape. - Tightened responsive breakpoints (Dashboard/My tickets now hide below sm) since the pill has less horizontal room than a full bar.
Previously, links below the sm/md breakpoints just vanished (About, Security, Dashboard, My tickets had no mobile access at all). Now: - A real hamburger menu (Menu/X icon) appears below md, opening a slide-down panel with every link plus auth actions — nothing is unreachable on a phone anymore. - Active-route highlighting: the current page's link is bold with a small gradient underline (desktop) or bold text (mobile panel). - Scroll-aware chrome: the pill's border/background/shadow intensify once the page is scrolled, a subtle but standard "advanced navbar" touch. - Mobile menu locks body scroll while open and closes automatically on navigation, closing icon toggle included.
The old pages were a bare heading + unstyled inputs floating on the page background. Now: - AuthLayout: a two-column split on desktop (brand panel with the logo, headline, and three concrete value-prop bullets on the left; the form in a bordered, shadowed card on the right), single-column on mobile with just the card. - TextField: shared input component with a leading icon (Mail/Lock/ User), consistent border/focus-ring styling, and an optional hint line — used identically on both pages instead of ad hoc <input>s. - Replaced the generic "Something went wrong. Please try again." fallback with "Could not reach the server. Is the backend running?" — the actual failure mode hit repeatedly in testing (backend wasn't running) now says so instead of a vague catch-all.
- Skip the doomed /users/me request for anonymous visitors (StellarTickets#19) - Show an error when staff try to check in/revoke without a wallet (StellarTickets#18) - Add About and Security pages to the sitemap (StellarTickets#17) - Render "General admission" instead of a dangling "Seat" label (StellarTickets#16) - Validate ticket type price/quantity as numeric input (StellarTickets#15) - Add target/rel to the Security page contract link (StellarTickets#14) - Add target/rel to About page repo links (StellarTickets#13) - Open external footer links in a new tab with rel set (StellarTickets#12) - Use next/link for internal homepage CTA links (StellarTickets#11) - Show an error instead of a blank screen on org fetch failure (StellarTickets#10) - Handle errors on the resale listings fetch (StellarTickets#9) - Clear loading state and show an error if org list fetch fails (StellarTickets#8)
✅ Deploy Preview for stellartickets ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes a batch of 12 issues covering auth, error handling, and link/UI bugs across the app.
Closes #8
Closes #9
Closes #10
Closes #11
Closes #12
Closes #13
Closes #14
Closes #15
Closes #16
Closes #17
Closes #18
Closes #19