Skip to content

Work through the human review of the relaunched pages - #129

Merged
openipc-ai merged 11 commits into
masterfrom
review/human-pass-2
Aug 28, 2026
Merged

Work through the human review of the relaunched pages#129
openipc-ai merged 11 commits into
masterfrom
review/human-pass-2

Conversation

@openipc-ai

Copy link
Copy Markdown
Collaborator

Everything from the review pass on dev.openipc.org, plus two dead links found
on the way. All of it has been on dev throughout — currently c026c640, 36
page/locale combinations answering 200, zero 5xx.

Homepage

  • The microline dropped no cloud required. The lede two lines above already
    makes that point, and the cloud is not always someone else's.
  • The languages figure is gone from the statistics. Three is not a number
    worth a tile.
  • Majestic links to its wiki page. The pillar card is a .stretched-link,
    whose overlay swallows anything inside it, so the link needed lifting above
    that; verified with elementFromPoint that it is actually clickable.
  • Story step 2 is "The servers go quiet". The hero lede, the story heading
    and that step all said "cloud" — three times in the first screen and a half.
  • The partner wall is three ordered rows: global partners, then
    manufacturers and integrators, then friendly projects.

/low-latency

  • RunCam and EMAXRunCam and other vendors. RunCam is the one actually
    contributing.
  • RubyFPV and Mario FPV link to the same URLs their logos carry.

/business

Manufacturers, then integrators, each its own labelled row. A commercial
reader is asking who ships hardware and who installs it; our code host and our
university teams are not an answer to that.

/donate, /merchandise, /open-wall

  • The cryptocurrency card and its copy are gone from all three languages.
  • Merchandise is unlinked from the footer while there is nothing to sell. The
    route and the page stay — the shop is expected back.
  • The Open Wall intro no longer claims how long an image is kept. Nothing about
    the purge changed; the page simply stops promising it.

The closing band

It ran straight into the text above it. Four of the five pages that render it
end with an article on white, so the gap is now the band's default rather than
something each page must remember. The homepage passes flush: true: its band
sits under a tinted full-bleed section, where a gap is a white stripe between
two coloured bands.

The wall itself

INTERNATIONAL_PARTNERS becomes PARTNER_GROUPS, keyed on why each logo is
there — global, manufacturers, integrators, fpv, education, research,
exhibitions. Pages ask for what they want; the Russian integrator list still
appends to :integrators for :ru only.

  • Faceter added, cut from the supplied artwork to the wall's convention.
  • Really moved to integrators — it was in global because its link goes to
    Open Collective, which said more about how it pays us than what it does.
  • AnyCam moved out of the territory-gated list; it serves more than Russia
    and is now shown to everyone.
  • Expo Electronica gets :exhibitions, which no page composes: kept with
    its logo and link, rendered nowhere, ready for a trade-show page.

An empty row takes its heading down with it. That was already true but only by
luck — partner_rows delegated to partner_logos, where no arguments means
every group, so a row naming no groups would have rendered all of them.

Two dead links found on the way

  • qemu-hisilicon on /ecosystem still pointed at github.com/widgetii/...,
    which 404s. It lives under OpenIPC now.
  • telemetry had a card, a badge and copy in three languages for a repository
    that does not exist and by all appearances never has. Removed — and
    /telemetry answers 410 rather than redirecting to GitHub's own 404 or
    falling through to the catch-all, which 302s to the homepage and would tell a
    crawler the page moved there.
  • github.com/openipc appeared 24 times against OpenIPC everywhere else,
    and /coupler redirected through a doubled slash. Both fixed.

Verification

bin/rails test 324 runs, 1684 assertions, 0 failures (303 → 324)
i18n-tasks missing none, across en/ru/zh
i18n-tasks unused 72 — unchanged
dev 36 page/locale combinations 200, 0 5xx

New tests cover the row order and its per-row group order, the empty-row guard,
/business's two rows, :exhibitions rendering on none of seven pages, the
band's spacing on the four pages that need it and its absence on the one that
does not, /donate against crypto returning, and every project card resolving to
a repository under the OpenIPC organisation.

rubocop still cannot start on this branch — .rubocop.yml requires
rubocop-performance and the Gemfile does not list it. Pre-existing; #120
fixed it on master, and this branch predates that merge.

The Chinese copy throughout is mine and has not been read by a native speaker.

…r existed

Two dead links on /ecosystem.

qemu-hisilicon was still addressed to the personal account it was developed
in, github.com/widgetii/qemu-hisilicon. It lives under OpenIPC now, and the
old URL 404s.

telemetry had a card, a stage badge and copy in three languages for
github.com/OpenIPC/telemetry, which does not exist and by all appearances
never has. Removed, along with proj_telemetry in en, ru and zh.

Both were reported rather than found, so there is now a test: every link on
a project card must resolve to a repository under the OpenIPC organisation.
It is scoped to the cards rather than to every GitHub URL on the page --
the prose links the wiki, which is not a project -- and it was checked
against the old link first, where it fails naming widgetii.

I checked the other seventeen repositories the page links while I was in
there. Those two were the only broken ones.
… is gone

Started as a casing inconsistency and turned up two real defects sitting on
the same lines.

github.com/openipc appeared 24 times against github.com/OpenIPC everywhere
else -- in the navbar, the footer, the admin header, the installation note
in all three languages, and sixteen route redirects. GitHub does not care
about the case, but we should spell our own name one way.

Two of those lines were broken rather than untidy. /coupler redirected to
github.com/OpenIPC//coupler, with a doubled slash. And /telemetry, in both
its plain and its wildcard form, redirected to github.com/OpenIPC/telemetry
-- the repository this branch has just removed from /ecosystem, which does
not exist and by all appearances never has.

/telemetry answers 410 now, next to /binaries and for the same reason
recorded there: deleting the route is worse than keeping it, because the
catch-all answers unknown paths with a 302 to the homepage, which tells a
crawler the page moved there rather than that it is gone.

Tests follow each GitHub shortcut, plain and with a deep path, and assert
the destination is exactly https://github.com/OpenIPC/<repo>. Checked
against the old value first, where it fails naming openipc//coupler.
Homepage
- The microline dropped "no cloud required". The lede two lines above already
  makes that point, and the cloud is not always someone else's -- some of it
  is ours.
- The languages figure is gone from the statistics. Three is not a number
  worth a tile.
- Majestic in the firmware pillar is a link to its wiki page now. The card
  uses .stretched-link, which covers anything inside it, so the link needed
  lifting above that overlay; the arrow still takes the whole card.
- The partner wall is six labelled rows instead of one block of logos, which
  is the point of the restructure below.

/low-latency
- "RunCam and EMAX" becomes "RunCam and other vendors". RunCam is the one
  actually contributing and the pairing overstated the rest.
- RubyFPV and Mario FPV are links, to the same URLs their logos carry.
- The dark call-to-action band was butting straight against the white article
  above it. The gap goes on the page rather than the partial: on the homepage
  that band follows another dark section, where a top margin shows up as a
  white stripe.

/business
- Manufacturers and integrators only. A commercial reader is asking who ships
  hardware and who installs it, and our code host, our FPV friends and our
  university teams are not an answer to that.

/merchandise
- Unlinked from the footer while there is nothing to sell. The route and the
  page stay: the shop is expected back, plausibly through Open Collective, and
  deleting them would mean writing it all again.

The wall itself
- INTERNATIONAL_PARTNERS becomes PARTNER_GROUPS, keyed on why each logo is
  there: global, manufacturers, integrators, fpv, education, research. Pages
  ask for the groups they want -- partner_groups(:manufacturers, :integrators)
  -- and the Russian integrator list still appends to :integrators for :ru
  only, as before.

Not done, and needing a decision rather than a guess: Faceter and rapid have
no logo asset in the repository, so neither could be added. Really, TUDSaT and
the commented-out Expo Electronica were placed by my reading rather than by
instruction -- a sponsor, a student team and a trade show respectively.
At six, half the rows were a single logo under a heading, which reads as a
gap rather than a group: research is one logo, and integrators is one until
the visitor is Russian.

Three rows now, in the order the wall is meant to be read -- who ships and
installs the hardware, who hosts us, who we work alongside. English lands
at 3/3/6, Russian at 19/3/6 because the integrator list is territory
specific.

The six groups are untouched. HOME_PARTNER_ROWS only says how the homepage
composes them, /business still asks for :manufacturers and :integrators
directly, and splitting a row back out is one line. The three labels that
now have no row of their own went with it, so the unused-translation count
stays where it was.
A universal integrator, so it goes in the :integrators group proper, which
every visitor sees, rather than in RU_INTEGRATORS, which is appended only
for Russian.

The logo is cut from the supplied seeklogo PNG. That file already carries a
correct alpha channel with the mark sitting in a band across a square
canvas, so the work was cropping to those alpha bounds -- (16,120)-(304,200)
-- and scaling the 288x80 result to 580px wide, the width the rest of the
wall uses. Nothing was keyed out; an earlier attempt that flattened white to
transparent destroyed the alpha the file already had.

The supplied JPEG is the same wordmark with the "Know the people around you"
tagline underneath, on white. Not used: the tile is 4.5rem tall, where that
second line would be unreadable, and every other logo on the wall is a
wordmark without one.
Really is an integrator, not a global partner -- it was in :global because
its link goes to Open Collective, which said more about how it pays us than
about what it does. AnyCam serves more than Russia, so it leaves the
territory-gated list for :integrators proper, next to GoodCam, and is now
shown to everyone rather than only to Russian-speaking visitors.

TUDSaT stays in :education, which was the reading rather than the
instruction until now.

Expo Electronica is a trade show and belongs in neither. It gets a group of
its own, :exhibitions, which no page composes: kept in the system with its
logo and link intact, rendered nowhere, ready for the exhibitions page that
may come. That is the same treatment /merchandise got, and like that one it
needs holding in place -- adding a group to a row is a word. A test asserts
it appears on none of the seven pages that carry a wall.

RU_INTEGRATORS is down to fifteen and the general integrator row is up to
four, so English finally has a row that is not the same three logos.
Homepage: global partners, then manufacturers and integrators, then friendly
projects -- and inside that last row, research before FPV before education.
HOME_PARTNER_ROWS is a Hash, so both orders are just the order it is written
in, and a test asserts the page matches rather than merely contains them.

/business already asked for its two groups by name and so already listed
manufacturers before integrators. It has a test now saying so, because that
order was an accident of the argument list rather than anything stated.

An empty row takes its heading down with it. That was already true, but only
by luck: partner_rows delegated to partner_logos, where no arguments means
every group, so a row naming no groups would have rendered all of them
instead of nothing. Both now go through one place that applies the
territory rule, and a row with nothing in it returns nothing.
The intro claimed images are removed a couple of days after they arrive.
Out, in all three languages, along with the comment that explained how the
wording had been softened -- there is no claim left to soften.

Nothing about the purge changed: PurgeImagesJob::RETENTION is still two
days and the nightly sweep still runs. The page simply stops promising a
visitor something it is not in a position to guarantee.
The hero lede says your hardware should not answer to a vendor's cloud, the
story heading says cameras should not die when their cloud does, and step 2
was called "The cloud goes dark" -- the same idea three times in the first
screen and a half.

Step 2 is the one to change: it is about the servers behind the cloud being
switched off, which its own body text already says, so the heading can say
it too. Two mentions left across the hero and the story, both carrying the
argument rather than repeating it.
The dark band ran straight into the text above it on /get-started, the same
way it did on /low-latency. Four of the five pages that render it end with
an article on white, so the gap is now the band's default rather than
something each page has to remember; the fix I put on /low-latency last time
is removed, since one mechanism is enough.

The homepage is the exception and says so: its band sits directly under a
tinted full-bleed section, where a gap is a stripe of white between two
coloured bands. It passes flush: true.

/donate loses the cryptocurrency card and its copy in all three languages.
Open Collective is the whole page now.

Both are held by tests -- the band's spacing on the four pages that need it
and its absence on the one that does not, and the donation page against the
crypto markup and copy coming back.
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Refine relaunched pages and restructure partner walls

✨ Enhancement 🐞 Bug fix 🧪 Tests 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Organizes partner walls by relationship and locale for audience-specific homepage and business
 rows.
• Refines multilingual copy, donation options, links, and closing-band spacing across relaunched
 pages.
• Retires dead telemetry routes and adds regressions for links, grouping, and rendering.
Diagram

graph TD
  Locale["Localized copy"] --> Pages["Marketing pages"] --> Shared["Shared partials"] --> Browser["Rendered site"]
  Groups["Partner groups"] --> Pages
  Routes["Legacy routes"] --> Browser
  Tests["Integration tests"] --> Pages
  Tests --> Routes
Loading
High-Level Assessment

The centralized categorized partner registry with page-selected groups is the appropriate approach for this static Rails site. Hardcoding separate walls in each template would duplicate partner metadata and locale rules, while a CMS or database-backed model would add unnecessary operational complexity for a small, curated list.

Files changed (23) +401 / -132 · 1 not counted

Enhancement (6) +20 / -20
faceter_mini.pngAdd Faceter partner-wall artwork not counted

Add Faceter partner-wall artwork

• Adds the normalized Faceter logo asset used by the new integrator group.

app/assets/images/partners/faceter_mini.png

business.html.erbShow commercial partner categories separately +6/-2

Show commercial partner categories separately

• Limits the business partner wall to manufacturers and integrators, rendering each as a labeled row in commercial relevance order.

app/views/pages/business.html.erb

donate.html.erbRemove the cryptocurrency donation card +1/-7

Remove the cryptocurrency donation card

• Drops the TON donation option and leaves Open Collective as the sole donation card.

app/views/pages/donate.html.erb

home.html.erbRefine homepage statistics, links, and partner rows +6/-8

Refine homepage statistics, links, and partner rows

• Makes the Majestic reference linkable, removes the language statistic, and renders partners in three ordered labeled rows. Keeps the homepage closing band flush with the preceding colored section.

app/views/pages/home.html.erb

low_latency.html.erbRender linked FPV credits +1/-1

Render linked FPV credits

• Switches the credits copy to its HTML translation so RubyFPV and Mario FPV can link to their respective sites.

app/views/pages/low_latency.html.erb

_logo_wall.html.erbSupport labeled partner-wall rows +6/-2

Support labeled partner-wall rows

• Accepts an optional localized heading and adds spacing between titled logo rows.

app/views/shared/_logo_wall.html.erb

Bug fix (7) +50 / -27
_cards.scssRestore links inside stretched pillar cards +8/-0

Restore links inside stretched pillar cards

• Raises links in pillar-card copy above the stretched-link overlay so embedded references remain clickable without losing the whole-card target.

app/assets/stylesheets/components/_cards.scss

_footer.html.erbCorrect GitHub links and hide merchandise navigation +2/-3

Correct GitHub links and hide merchandise navigation

• Normalizes OpenIPC GitHub organization casing and removes the merchandise link while the shop has no products.

app/views/layouts/_footer.html.erb

_navbar.html.erbNormalize navbar GitHub destinations +2/-2

Normalize navbar GitHub destinations

• Corrects the organization casing for the wiki and GitHub navigation links.

app/views/layouts/_navbar.html.erb

admin.html.erbNormalize the admin GitHub link +1/-1

Normalize the admin GitHub link

• Points the admin header at the correctly cased OpenIPC GitHub organization URL.

app/views/layouts/admin.html.erb

ecosystem.html.erbRemove dead telemetry project and repair QEMU link +2/-3

Remove dead telemetry project and repair QEMU link

• Moves qemu-hisilicon to its OpenIPC repository URL and removes the nonexistent telemetry repository card.

app/views/pages/ecosystem.html.erb

_cta_band.html.erbAdd default spacing before closing bands +10/-2

Add default spacing before closing bands

• Adds top spacing by default when the closing band follows white article content, with an opt-out for flush layouts.

app/views/shared/_cta_band.html.erb

routes.rbRepair GitHub shortcuts and retire telemetry +25/-16

Repair GitHub shortcuts and retire telemetry

• Normalizes OpenIPC repository redirects, removes doubled slashes, and returns HTTP 410 for telemetry paths. Keeps the unlinked merchandise route available for a future shop relaunch.

config/routes.rb

Refactor (1) +109 / -41
pages_helper.rbCategorize and compose partner-wall groups +109/-41

Categorize and compose partner-wall groups

• Replaces the flat international partner list with purpose-based groups and ordered homepage rows. Centralizes Russian-only integrator merging and suppresses empty groups or rows.

app/helpers/pages_helper.rb

Tests (2) +178 / -2
redirects_test.rbCover GitHub redirects and retired telemetry paths +30/-0

Cover GitHub redirects and retired telemetry paths

• Verifies every repository shortcut has a well-formed OpenIPC destination and that telemetry paths return HTTP 410.

test/controllers/redirects_test.rb

relaunch_pages_test.rbExpand relaunch page regression coverage +148/-2

Expand relaunch page regression coverage

• Covers ecosystem repository ownership, partner grouping and order, locale behavior, hidden exhibitions, CTA spacing, and removed cryptocurrency content. Updates asset and linked-credit assertions for the new structures.

test/controllers/relaunch_pages_test.rb

Documentation (7) +44 / -42
index.html.erbDocument the corrected Open Wall retention claim +5/-6

Document the corrected Open Wall retention claim

• Updates the template rationale to explain why the page no longer promises a specific image-retention period or verified uploads.

app/views/snapshots/index.html.erb

en.ymlUpdate English shared labels and Open Wall copy +8/-3

Update English shared labels and Open Wall copy

• Adds partner-row labels, normalizes the installation wiki URL, removes an unused FPV version label, and stops promising snapshot retention duration.

config/locales/en.yml

pages.en.ymlRevise English relaunch page copy +5/-9

Revise English relaunch page copy

• Removes cryptocurrency, telemetry, and language-stat translations while refining homepage and low-latency wording. Adds links for Majestic and FPV partners.

config/locales/pages.en.yml

pages.ru.ymlRevise Russian relaunch page copy +5/-9

Revise Russian relaunch page copy

• Mirrors the English content removals and homepage refinements in Russian, including linked partner references and corrected vendor wording.

config/locales/pages.ru.yml

pages.zh.ymlRevise Chinese relaunch page copy +5/-9

Revise Chinese relaunch page copy

• Mirrors the content removals, homepage refinements, and linked partner references in Chinese.

config/locales/pages.zh.yml

ru.ymlUpdate Russian shared labels and Open Wall copy +8/-3

Update Russian shared labels and Open Wall copy

• Adds localized partner-row headings, corrects the installation wiki URL, removes an unused FPV label, and removes the snapshot-retention promise.

config/locales/ru.yml

zh.ymlUpdate Chinese shared labels and Open Wall copy +8/-3

Update Chinese shared labels and Open Wall copy

• Adds localized partner-row headings, corrects the installation wiki URL, removes an unused FPV label, and removes the snapshot-retention promise.

config/locales/zh.yml

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can reply 'qodo' on any finding to push back, ask questions, or dig deeper

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@openipc-ai
openipc-ai merged commit d4592df into master Aug 28, 2026
2 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.

1 participant