Skip to content

Epic: finish the openipc.org content relaunch — the pages June planned and the pages August left in the old design #206

Description

@openipc-ai

Tracking issue for the second stage of the content relaunch planned in June 2026. The reconstruction it is built from: ~/reports/2026-09-20-openipc-org-content-relaunch-beyond-phase-1.md. The June plan file itself is lost, so this issue is the scope of record.

What the June plan decided

Positioning: "OpenIPC is the open platform for embedded video", plus the story of freeing cameras from their vendors' clouds. Navigation: Get Started | Hardware | Low Latency | Ecosystem | For Business | Community | News. Design: an engineering workbench, light body with dark ink (#0f1422) anchor sections, brand indigo #4c60d8 as the real primary, IBM Plex self-hosted, vanilla JS. Low Latency is the flagship pillar (/fpv is a 301 to it). Integrator logo walls are territory-specific: Russian integrators appear for ru visitors only. News is written as Markdown in the repository and rendered with kramdown. Labs and news ship in English only.

Languages: three. The maintainers decided on 2026-08-25 that the site serves English, Russian and Chinese and nothing else, because the cost is in keeping translations in step with the English copy, not in producing them.

What Phase 1 delivered, and what it left

Phase 1 landed on 2026-08-28 as #120 to #124: the design foundation (split stylesheet, self-hosted fonts, modular JS), the metadata, the navigation and footer, seven full-bleed pages (home, get-started, low-latency, ecosystem, business, community, donate), the redirect map, and the resurrected /open-wall.

It left 24 templates rendering inside the pre-relaunch .container wrapper (app/views/layouts/application.html.erb:64-75 falls back to it for any page that does not set content_for :fullwidth):

surface templates fate in this epic
/our-team, /green_life 2 fold into the new /about
/utilities 1 fold into the new /tools
/merchandise 1 retire
three web tools under /tools/ 3 restyle, with a /tools landing page
timelaps-interval-calculator (unrouted stub) 1 delete
/stages-of-firmware-development 1 restyle
/web-interface, /majestic-endpoints 2 restyle
hardware catalogue and wizard (cameras/socs/) 7 restyle
Open Wall (snapshots/) 6 restyle

And three things June named that do not exist yet: /about (still a 302 to /community), /labs, and the news section (there is no Markdown renderer anywhere in the app).

Decisions taken

choice
About one page: what OpenIPC is, the team, the longevity story; absorbs /our-team and /green_life with 301s
Tools one landing page: the web tools we host and the vendor downloads; absorbs /utilities with a 301
Merchandise retired; the shop is rebuilt when there is something to sell
Open Wall in scope; it is the most visited page after the homepage and the one the homepage mosaic sends people to
News Markdown files in the repository, kramdown, English only at launch, Atom feed
Labs English only at launch, as June decided
/majestic-endpoints the URL stays for inbound links; it leaves the sitemap, matching its absence from the menus
Russian integrator wall stays visible on the ru homepage. This was left as a question in #123; it is settled here unless the maintainers say otherwise
Languages every new page lands in en, ru and zh, or is listed above as English only

Phases

Phase 0 — needs no design work.

Phase 1 — the pages June named, built by folding what exists.

Phase 2 — restyle what stays.

Phase 3 — close the seam.

The sequencing judgement that matters most

Folds before restyles, so nothing is restyled and then deleted. The new pages before the restyles, because they settle the components the restyles reuse (project cards, stage badges, browser frames). The seam closes last, and only when test/controllers/legacy_pages_test.rb has nothing left to pin.

Risks worth reading before starting

  1. The wizard's printed commands. People paste them into bootloaders, and InstallationHelper#guarded_flash carries three field reports of a missing step bricking a camera. The hardware restyle changes markup and stylesheet and not one byte of a command; test/controllers/socs_controller_test.rb is the spec and stays untouched.
  2. A restyle that drops a URL breaks inbound links in forum posts and the wiki. Every fold ships a 301 with a test, the way Serve the relaunched site #124 did.
  3. Three languages is a promise per page. A page that lands in English with "translation missing" elsewhere is worse than the old page. Each child says which it is: three locales, or English only by decision.
  4. The seam never closes. If the restyles are done "later", the site keeps two designs indefinitely, which is what Phase 1 was supposed to end. Phase 3 is the finish line, not an option.

Things that must not be lost

  • socs_controller_test.rb and guarded_flash define the wizard's output. The restyle is done against them, never around them.
  • /web-interface is generated from config/webui_gallery.yml, and tools/webui-gallery/run.sh photographs a camera from the same manifest, so the page and the pictures cannot drift. The restyle keeps that pairing and test/controllers/web_interface_test.rb.
  • The high-resolution timer must not depend on the JS bundle. Its inline script is what makes it usable as a latency-measurement tool on any device; the comment in the template says why.
  • /majestic-endpoints stays reachable. It is a pointer for inbound links, not a page to browse; test/controllers/majestic_endpoints_test.rb holds that.
  • PagesHelper::RU_INTEGRATORS is appended for ru only. The territory gate is in Ruby with a test; no restyle moves it back into CSS.
  • POST /snapshots is the camera upload API. The Open Wall restyle touches the gallery views and nothing on that path.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions