Skip to content

feat(www2): add viche.social to projects - #32

Merged
dmythro merged 3 commits into
mainfrom
feat/viche-project
Jul 29, 2026
Merged

feat(www2): add viche.social to projects#32
dmythro merged 3 commits into
mainfrom
feat/viche-project

Conversation

@dmythro

@dmythro dmythro commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Adds viche.social — a client-first web app putting Bluesky, Mastodon and Nostr in one timeline, with keys and accounts staying on the reader's device.

Leads the list at sortOrder: 1; the other eight shift down by one.

Entry

status live — both domains are deployed and the app works today
url viche.social (the article links viche.app for the product itself)
dates started 2026-04-21, published today
category dev, organisation Annexare
github omitted — see below

No GitHub link. The repo is private until the project opens up, and a dead link plus a stats fetch that finds nothing is worse than no link at all. github is optional on Project, and both the card and the page already guard on it, so nothing needed changing.

uses credits countries-list among others, which Viche genuinely depends on — so the two projects now cross-link.

The article

Six beats, not seven. Examples is skipped: install and run instructions invite a clone that cannot happen while the source is closed, so the beat has no honest content. packages/locales/mdx/projects/README.md marks beats 1–3 as required, so this is a deliberate deviation — worth a line in that README if closed-source projects become a pattern.

What it covers instead: how the app decides what each network can do, why feed merging is a setting rather than the shape of the app, where credentials live, and why the integration seam belongs in the client at all.

Both locales are structurally identical — 19 paragraphs, 9 headings each — and the Ukrainian is written as Ukrainian rather than translated sentence by sentence.

Icon and images

Viche's mark is inlined as SVG rather than adding a React-only icon package for one glyph. It does not share Lucide's 24px stroke grid, so iconDataUri gained a small branch for marks on their own viewBox. The path data lives in utils/brandIcons.ts, read by both the Astro component and the OG renderer, so the page and its card cannot drift.

Hero images are viche.social's own OG cards, one per locale, converted PNG → WebP on the way in: 48 KB → 17 KB each. The existing rehype-local-image-size pass picks up their intrinsic size, so the tags carry width and height and the page does not shift.

CV

Cited in the open-source paragraph in both locales — framed as being built, with open source planned, not as an open-source project, which it is not yet. Links the project page rather than jumping straight off-site, root-relative and locale-aware, matching how faq.mdx already links /en/projects. feedPages CV date bumped, since its copy changed.

Also fixes зкачуваньзавантажень on that line. The typo predates this branch but ships in this diff.

Verified

Lint, types, 37 tests and the build are green. Reviewed locally with CodeRabbit CLI, and one Copilot round on the PR — both its findings are addressed above.

A client-first web app that puts Bluesky, Mastodon and Nostr in one
timeline, with keys and accounts staying on the reader's device. Both
domains are live, so the entry is `live`, and it leads the list — it is
the largest thing in it.

No GitHub link: the repo is private until the project opens up, and a
dead link plus a stats fetch that finds nothing is worse than no link.
`github` is optional, and the card and page already guard on it.

The article skips the Examples beat the template asks for. Install and
run instructions invite a clone that cannot happen yet, so the beat has
no honest content while the source is closed. What it covers instead is
drawn from the repo: the capability sets that replace network
conditionals and generate the public feature matrix, feed merging as a
setting rather than the shape of the app, and where credentials live.

Viche's own mark comes with it — Phosphor's IntersectThree, duotone,
inlined as SVG rather than added as a React-only dependency for one
glyph. It does not share Lucide's grid, so it carries its own viewBox and
fills instead of strokes, in the card, the page and the generated OG
image alike.

The hero images are viche.social's own OG cards, one per locale,
converted to WebP on the way in — 48 KB to 17 KB each.

Also cite it from the CV's open-source paragraph in both locales, as
something being built with open source planned rather than as an
open-source project, linking the project page rather than jumping
straight off-site.
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@dmythro, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 51 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8902684f-94e9-4c83-872a-84e3fcc63c98

📥 Commits

Reviewing files that changed from the base of the PR and between 004dc37 and dce4128.

📒 Files selected for processing (6)
  • apps/www2/src/components/icons/IntersectThree.astro
  • apps/www2/src/utils/brandIcons.ts
  • apps/www2/src/utils/ogImage.ts
  • packages/locales/mdx/projects/viche.en.mdx
  • packages/locales/mdx/projects/viche.uk.mdx
  • packages/locales/mdx/web-dev.uk.mdx
📝 Walkthrough

Walkthrough

Adds the Viche project to the projects catalog with bilingual documentation, localized WebP hero images, metadata, and reordered highlighted-project positions. Adds the IntersectThree icon to project cards, project pages, and filled OG image rendering. Updates the CV feed timestamp and bilingual web-development profile text with Viche information.

Sequence Diagram(s)

sequenceDiagram
  participant Visitor
  participant ProjectPage
  participant ProjectData
  participant IntersectThree
  participant OGImage
  Visitor->>ProjectPage: open Viche project page
  ProjectPage->>ProjectData: load Viche metadata
  ProjectData-->>ProjectPage: return project details and icon key
  ProjectPage->>IntersectThree: render project icon
  ProjectPage->>OGImage: generate project image data
  OGImage-->>Visitor: provide rendered project image
Loading

Possibly related PRs

  • dmythro/dmythro.com#24: Adds a project entry and bilingual project documentation through the same project-content structures.
  • dmythro/dmythro.com#25: Extends the projects, feeds, and OG image-generation infrastructure used by this change.

Poem

A rabbit hops through feeds anew,
With Viche’s worlds in one bright view.
Three timelines meet, keys tucked away,
New icons sparkle through the day.
“Binky!” says the hare—“ship it hooray!”

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the main change: adding viche.social to the projects list.
Description check ✅ Passed The description is directly related to the changeset and accurately explains the new Viche project entry and related updates.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/viche-project

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new featured project entry for viche.social to the www2 projects list, along with bilingual project articles and supporting icon/OG-image rendering updates. Also updates the CV “open-source/projects” paragraph in both locales and bumps the CV feed timestamp so the change surfaces in feeds.

Changes:

  • Add viche to apps/www2/src/data/projects.ts (highlighted, sortOrder lead) and create EN/UK MDX project articles.
  • Add a custom IntersectThree icon component and support rendering that filled icon in cards, project pages, and OG image generation.
  • Update EN/UK web-dev MDX CV copy to mention viche.social and bump /cv’s updatedAt in feed pages.

Reviewed changes

Copilot reviewed 10 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/locales/mdx/web-dev.uk.mdx Updates Ukrainian CV snippet to mention viche.social (contains a typo to fix).
packages/locales/mdx/web-dev.en.mdx Updates English CV snippet to mention viche.social.
packages/locales/mdx/projects/viche.uk.mdx Adds new Ukrainian project article for viche.
packages/locales/mdx/projects/viche.en.mdx Adds new English project article for viche.
apps/www2/src/utils/ogImage.ts Adds support for rendering filled/non-Lucide icons in generated OG images.
apps/www2/src/pages/[locale]/projects/[slug].astro Adds intersect-three icon mapping for the project detail page.
apps/www2/src/data/projects.ts Adds the viche project entry and shifts sort order for existing highlighted projects.
apps/www2/src/data/feedPages.ts Bumps CV updatedAt so feed consumers see the CV text change.
apps/www2/src/components/ProjectCard.astro Adds intersect-three icon mapping for project cards.
apps/www2/src/components/icons/IntersectThree.astro Adds the custom SVG icon component used by cards/pages.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/locales/mdx/web-dev.uk.mdx Outdated
Comment thread apps/www2/src/utils/ogImage.ts Outdated
The mark's path data sat in both the Astro component and the OG renderer,
so touching one would have silently desynced the page from its card. Move
it to `utils/brandIcons.ts` and have both read from there.

Also "зкачувань" -> "завантажень" on the CV. The typo predates this
branch, but the line ships in this diff.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (2)
apps/www2/src/utils/ogImage.ts (1)

67-67: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Use one source of truth for the IntersectThree path data.

The full SVG path is duplicated between apps/www2/src/utils/ogImage.ts and apps/www2/src/components/icons/IntersectThree.astro; extract the viewBox and shapes into a plain shared module so future icon edits cannot make the page and OG image diverge.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www2/src/utils/ogImage.ts` at line 67, Extract the IntersectThree SVG
viewBox and path data into a plain shared module, then update the OG image
utility and the IntersectThree.astro component to import and reuse that single
source of truth. Remove the duplicated inline path data while preserving the
existing rendered SVG output.
apps/www2/src/components/ProjectCard.astro (1)

4-4: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Restore the required import-group separators in both Astro files.

The new alias imports are correct, but both files need blank lines separating package imports, aliases, and relative imports.

  • apps/www2/src/components/ProjectCard.astro#L4-L4: add separators around the @/components alias group.
  • apps/www2/src/pages/[locale]/projects/[slug].astro#L10-L10: add a separator between package imports and the @/ alias group.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www2/src/components/ProjectCard.astro` at line 4, Restore blank-line
separators between import groups in apps/www2/src/components/ProjectCard.astro
lines 4-4, placing the `@/components` alias imports apart from package and
relative imports; also add the separator between package imports and the `@/`
alias group in apps/www2/src/pages/[locale]/projects/[slug].astro lines 10-10.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/locales/mdx/projects/viche.en.mdx`:
- Around line 52-56: The Viche privacy wording currently overstates the trust
boundary and “no key ever stored” claim. In
packages/locales/mdx/projects/viche.en.mdx lines 52-56, revise the English text
to state that Viche’s backend never receives identity keys or credentials while
protocol requests and tokens go directly to relays, PDS/AppViews, and Mastodon
instances, and acknowledge the persisted throwaway session keypair; apply the
equivalent Ukrainian correction in packages/locales/mdx/projects/viche.uk.mdx
lines 52-56.

In `@packages/locales/mdx/projects/viche.uk.mdx`:
- Line 21: У рядку таблиці замініть ненормативне написання «крос-постингу» на
«кроспостингу» або «перехресного постингу», зберігши решту тексту без змін.

In `@packages/locales/mdx/web-dev.uk.mdx`:
- Line 7: У тексті українського профілю замініть «проектами» на «проєктами», а
«зкачувань» на «завантажень», не змінюючи решту змісту.

---

Nitpick comments:
In `@apps/www2/src/components/ProjectCard.astro`:
- Line 4: Restore blank-line separators between import groups in
apps/www2/src/components/ProjectCard.astro lines 4-4, placing the `@/components`
alias imports apart from package and relative imports; also add the separator
between package imports and the `@/` alias group in
apps/www2/src/pages/[locale]/projects/[slug].astro lines 10-10.

In `@apps/www2/src/utils/ogImage.ts`:
- Line 67: Extract the IntersectThree SVG viewBox and path data into a plain
shared module, then update the OG image utility and the IntersectThree.astro
component to import and reuse that single source of truth. Remove the duplicated
inline path data while preserving the existing rendered SVG output.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ba2ee82c-836f-4ddd-b511-489266c08e17

📥 Commits

Reviewing files that changed from the base of the PR and between 76db8db and 004dc37.

📒 Files selected for processing (12)
  • apps/www2/public/viche-en.webp
  • apps/www2/public/viche-uk.webp
  • apps/www2/src/components/ProjectCard.astro
  • apps/www2/src/components/icons/IntersectThree.astro
  • apps/www2/src/data/feedPages.ts
  • apps/www2/src/data/projects.ts
  • apps/www2/src/pages/[locale]/projects/[slug].astro
  • apps/www2/src/utils/ogImage.ts
  • packages/locales/mdx/projects/viche.en.mdx
  • packages/locales/mdx/projects/viche.uk.mdx
  • packages/locales/mdx/web-dev.en.mdx
  • packages/locales/mdx/web-dev.uk.mdx

Comment thread packages/locales/mdx/projects/viche.en.mdx Outdated
Comment thread packages/locales/mdx/projects/viche.uk.mdx Outdated
Comment thread packages/locales/mdx/web-dev.uk.mdx Outdated
…n forms

"No key ever stored" contradicted its own sentence two lines later, which
says a throwaway session keypair is persisted. The claim worth making is
narrower and still strong: your identity key is never stored.

Also 2019 orthography — кроспостингу, and проєктами in both places it
appears on the CV, so the file matches the site's own «Проєкти».
@dmythro
dmythro merged commit 8308542 into main Jul 29, 2026
4 checks passed
@dmythro
dmythro deleted the feat/viche-project branch July 29, 2026 09:51
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.

2 participants