fix(ipfs2filecoin): design review follow-ups for the landing page - #350
Open
gmoranxyz wants to merge 14 commits into
Open
fix(ipfs2filecoin): design review follow-ups for the landing page#350gmoranxyz wants to merge 14 commits into
gmoranxyz wants to merge 14 commits into
Conversation
* Temporarily hide the Service Providers page Redirect /service-providers to the homepage and remove its links from the header/mobile nav, the homepage product grid, and the warm storage service page. The route itself is left in place so this is easy to revert once the page is ready to come back. * Address review comment from @rjan90 Switch the homepage "Compose the Building Blocks" grid to the three-column variant now that only three cards remain, and add short comments marking the hidden /service-providers route and its redirect so it isn't mistaken for dead code.
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Faq hardcoded divide-white/20, and Accordion hardcoded text-zinc-200 on the chevron and text-zinc-300 on the body. All three assume a dark background, which held while the homepage was the only consumer since it mounts the FAQ on a dark section. On a light or gray section the dividers and chevrons are effectively invisible. They now use --color-border-base, --color-text-base and --color-paragraph-text, which flip off the .light-section / .dark-section class that Section already sets, so no isDark branching is needed. Faq keeps useBackground purely for prose-invert. Moving the colour onto the item rather than the parent also fixes the first divider. divide-* targets every child after the first, so item one's border was falling back to currentColor and rendering at full brightness on dark. The homepage FAQ shifts slightly as a result: chevron zinc-200 to zinc-50, body zinc-300 to zinc-400, both now matching the tokens used everywhere else. That page is worth a look alongside this one. Review: @filipagr Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Follow-ups from a walkthrough of the page with Filipa Ribeiro. Alignment and spacing - "Estimate your deposit" and the hero sat 60px inset from their siblings, because PageSection already wraps children in a Container and page.tsx nested a second one, doubling the horizontal padding. Removed both, plus the now-unused import. - The Unit and Funded-for selects had the native arrow jammed against the border with a cavern between it and the value. A local SelectField goes appearance-none with a Phosphor caret inset to match the field's text, and the grid drops from three equal columns to 2fr/1fr/2fr so Unit is no longer a full-width field holding three characters. - "What this does not do" is constrained to max-w-5xl; lines ran past 15 words at desktop. Type - Both tables move off text-sm to text-base, with service names at text-lg. - Monospace figures dropped for the body font with tabular-nums. The reported problem was numbers appearing larger than the names beside them, which was a typeface illusion rather than a size difference, so matching the typeface removes it at the root while tabular-nums keeps the columns aligned. Flagging this one as the most debatable call in the batch. - The highlighted Filecoin row carries weight instead of a marginally darker grey, which read as a mistake rather than emphasis. Visual interest - How it works renders 2x2 rather than 3-up with an orphaned fourth, and step numbers sit above each title in the accent colour. This needs a new StepList component because the shared Card types title as a plain string, so the number could only ever be inlined as "01. Hand over the list". - Reason cards take icons, following how agents/ and warm-storage-service/ already pass Phosphor icons to Card. - The agent column takes two thirds and "Talk to us" becomes a one third call-out, giving the path with more to say more room. The external-link arrow beside Filebase and Pinata is tightened with a local override. It is sized for button text inside ExternalTextLink in ui-filecoin, so the real fix belongs upstream; this is a commented stopgap. Still open from the review and deliberately not attempted here: table whitespace now that the type sizes are settled, the hero background treatment, and the optional illustration beside the agent heading. Review: @filipagr Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
parseCidList already validated, deduped and stripped gateway prefixes, but the verdict box reported only a count. The successful path gave you nothing to act on, so the top of the page had no purpose: you still assembled cids.txt by hand. The prompt was in fact offered only on the over-cap branch, so the one outcome that succeeded was the one outcome with no output. A checked list now produces the agent prompt with your own CIDs inlined, via buildAgentPrompt, plus a cids.txt download of the cleaned and deduped list. AGENT_PROMPT stays as the fallback for the empty and over-cap cases, where pointing at a file is the right shape rather than inlining hundreds of lines. The instruction to "estimate what they cost to store below" is replaced. A check reads the CIDs and not the bytes behind them, so it cannot price anything on its own, and implying otherwise was the most confusing part of the flow. Resolving a CID to its actual size needs backend capability and is a separate conversation. Hero polish in the same component: "one per line" sits beside the label in the accent colour rather than surfacing only after a failed check, the button is centred, the empty textarea is shorter, and the free-check facts read as a scannable list instead of fine print. Copy prompt demotes from a full-width button to an icon in the code block's corner. Verified against deliberately messy input: a bare CID, a gateway URL, a duplicate and a junk line resolve to three unique CIDs, with the URL prefix stripped and both the skipped line and the duplicate reported. Review: @filipagr Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CLAUDE.md is per-machine guidance for Claude Code, and todo.md is the working list of design review actions for /ipfs2filecoin. Neither belongs in the repo. Note that this keeps todo.md local, so it does not travel to reviewers via git. Review: @filipagr Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
@gmoranxyz is attempting to deploy a commit to the FilOz Team on Vercel. A member of the Team first needs to authorize it. |
Author
|
@filipagr take a look and let me know what you think as a first pass! |
Fold the label, textarea and action into a single bordered panel with a live "X of Y lines are CIDs" readout and a Cmd/Ctrl+Enter shortcut. Move the verdict into its own CidListVerdict component with an icon per outcome, and extract pluralize so the readout and verdict agree. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… responsive Give each pricing row a detail sub-line so the provider is what you compare on and the plan tier stays secondary, and key rows by provider plus tier now that two Pinata tiers share a name. On mobile the three columns do not fit, so each provider becomes a stacked card; the full table returns at md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… hero and type Move the estimator into a companion card beside the comparison table (the table is the market rate, the card prices it for your data), with the two inputs side by side and a compact stacked result that fits the narrow column. Add a faint brand glow along the bottom of the hero, step the reason-card and agent-warning copy down a size, and render How it works four across on desktop. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(ipfs2filecoin): estimator beside the table, responsive pricing, hero polish
…COPY The rate footnote, one reason card, and the SEO description each restated $2.50 as a literal, so they could silently drift from the comparison table and estimator, which already derive from the constant.
fix(ipfs2filecoin): derive the $2.50 rate from USD_PER_TIB_MONTH_PER_COPY
gmoranxyz
marked this pull request as ready for review
August 5, 2026 14:30
Author
|
@jennijuju I think this is ready for you to take a look! Please forgive anything we broke with our clumsy vibe coding! |
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.
📝 Description
Design review follow-ups for
/ipfs2filecoin, from a walkthrough of the page with @filipagr on 31 July, plus two rounds of polish since.This targets
feat/ipfs2filecoin-landing-pagerather thanmainon purpose, so it feeds #346 instead of competing with it. Merging here means #346 carries the polish through tomainas one piece.Filipa's overall read was that the structure, content and calls to action are right — opening with "paste your CIDs" instead of a wall of reading is the correct choice. Almost everything below is layout and type hierarchy, plus one genuine functional gap and one drift risk.
Two things to know before reviewing:
src/app/ipfs2filecoin/page.tsx. The base branch has gained four commits this head doesn't have (bc84838runbook rewrite for the direct-upload flow,abbe4caflat data set fee charged once,b67a9fbunpin the CLI,55dcabdre-verify competitor rates), and they touch the same file as the layout rework.CostEstimator.tsx,constants/migration.tsanddata/pricing-comparison.tsall auto-merge; onlypage.tsxneeds hand-resolving.FilOzone:main, and the base is behindmain, so the diff against the base also shows.github/CODEOWNERS(chore: set CODEOWNERS #349), the@filoz/synapse-sdk1.1.1 bump (chore: update @filoz/synapse-sdk to v1.1.1 #348), and the temporary hiding of the Service Providers page with its redirect innext.config.ts(Temporarily hide the Service Providers page #347). Those aren't part of this work and will disappear once the base catches up withmain. Reviewable scope issrc/app/ipfs2filecoin/**plussrc/components/{Accordion,Faq}.tsxand.gitignore.🛠️ Key Changes
Three rounds, each commit scoped to one concern and independently revertable.
Round 1 — design review follow-ups (31 July)
fix(faq)— accordion dividers and chevrons were invisible.Faqhardcodeddivide-white/20andAccordionhardcodedtext-zinc-200/text-zinc-300. All three assume a dark background, which held while the homepage was the only consumer; this page mounts the FAQ on a gray section, where they disappear. Now uses the--color-border-base/--color-text-base/--color-paragraph-texttokens, which already flip off the.light-section/.dark-sectionclassSectionsets — so noisDarkbranching was needed. Moving the colour onto the item rather than the parent also fixes the first divider:divide-*targets every child after the first, so item one's border was falling back tocurrentColorand rendering at full brightness on dark.fix(ipfs2filecoin)— layout and type hierarchy.PageSectionalready wraps children in aContainerandpage.tsxnested a second one, doubling the horizontal padding.SelectFieldgoesappearance-nonewith a Phosphor caret inset to match the field's text.text-smtotext-base, service names totext-lg.tabular-nums.StepList— the sharedCardtypestitleas a plain string, so the number could otherwise only be inlined as "01. Hand over the list".agents/andwarm-storage-service/already pass icons toCard.max-w-5xl— lines ran past 15 words at desktop.feat(ipfs2filecoin)— a checked CID list now produces something.parseCidListalready validated, deduped and stripped gateway prefixes, but the verdict reported only a count, so the top of the page had no purpose — you still builtcids.txtby hand. The prompt was in fact only offered on the over-cap branch, so the one outcome that succeeded was the one with no output. A checked list now yields the agent prompt with your own CIDs inlined viabuildAgentPrompt, plus acids.txtdownload of the cleaned list.AGENT_PROMPTstays as the fallback for the empty and over-cap cases, where pointing at a file is the right shape rather than inlining hundreds of lines. The instruction to "estimate what they cost to store below" is gone: a check reads the CIDs, not the bytes behind them, so it cannot price anything on its own.chore— ignoresCLAUDE.mdand a localtodo.md.Round 2 — @filipagr's polish (#1, 3 August)
CID checker becomes one input surface. Label, textarea and action fold into a single bordered panel with a live "X of Y lines are CIDs" readout and a Cmd/Ctrl+Enter shortcut. The verdict moves into its own
CidListVerdictcomponent with an icon per outcome, andpluralizeis extracted so the readout and the verdict agree.Pricing table compares providers, not plan names. Each row gains a detail sub-line so the provider is what you compare on and the plan tier stays secondary, and rows are keyed by provider plus tier now that two Pinata tiers share a name. Below
mdthe three columns don't fit, so each provider becomes a stacked card; the full table returns atmd.Estimator pairs with the table. It moves into a companion card beside the comparison table — the table is the market rate, the card prices it for your data — at
lg:grid-cols-3with the table on two columns and the estimator on one, its two inputs side by side and a compact stacked result that fits the narrow column. Also: a faint brand glow along the bottom of the hero (--color-brand-500mixed to 12%, so it reads as light on the surface rather than a coloured panel), reason-card and agent-warning copy stepped down a size, and "How it works" four across atlg(2×2 fromsm).Round 3 — kill the hardcoded rate (#2, 5 August)
$2.50was restated as a literal in the rate footnote, one reason card, and the SEO description, so all three could silently drift from the comparison table and estimator, which already derive from the constant. All now go throughformatUsd(USD_PER_TIB_MONTH_PER_COPY).📌 To-Do Before Merging
page.tsxagainst the base's four newer commits. Worth doing as a merge of the base into this branch rather than a rebase, since the history is shared with @filipagr.tabular-numskeeps the columns aligned. Still the most debatable call here, and easy to revert.Accordion/Faqare shared, so the homepage FAQ changes too: chevronzinc-200→zinc-50, bodyzinc-300→zinc-400. Both now match the site's own tokens, but worth eyeballing since it's outside this page's scope.page.tsx. It's sized for button text insideExternalTextLinkinui-filecoin, so the real fix belongs upstream — worth a follow-up issue.Closed since the original review: the hero background treatment, now handled by the brand glow rather than a produced asset; and table whitespace, which the responsive stacked cards and settled type sizes addressed.
Still not attempted, both needing a call rather than code:
🧪 How to Test
nvm use && npm install && npm run dev, then open/ipfs2filecoin.https://ipfs.io/ipfs/…gateway URL, a duplicate, and a junk line. Watch the "X of Y lines are CIDs" readout as you type, then submit with Cmd/Ctrl+Enter rather than the button.lgthe comparison table should occupy two thirds with the "Estimate your deposit" card beside it on one third, tops aligned. Narrow the window: the card drops below the table, and belowmdthe table itself becomes one stacked card per provider.lg, 2×2 fromsm, step numbers above each title in the accent colour.Download cids.txtlink.npm run build(TypeScript, twoslash'd Synapse snippet, all 25 routes) passes at2a8113a, the PR Bump the dependencies group with 11 updates #1 merge. The head has since taken Build Main Components #2 and amainmerge and hasn't been rebuilt locally — the conflict resolution will need a fresh build anyway.📸 Screenshots
Verified in-browser at 1284px. Not attached here — CLI-created PR. Happy to add before/afters for the FAQ, the steps grid, the table/estimator pairing and the CID-check flow if useful.
🔖 Resources
🤖 Generated with Claude Code