Skip to content

feat(landing): OpenCode mobile wedge — flagship page, guide, notifications - #187

Open
tanlethanh wants to merge 1 commit into
mainfrom
tanlethanh/optimize-content
Open

feat(landing): OpenCode mobile wedge — flagship page, guide, notifications#187
tanlethanh wants to merge 1 commit into
mainfrom
tanlethanh/optimize-content

Conversation

@tanlethanh

@tanlethanh tanlethanh commented Jul 10, 2026

Copy link
Copy Markdown
Owner

Summary

Positioning shift to enter as the mobile companion for OpenCode and local coding agents, without redesigning the homepage. The wedge is the blocked-agent workflow: notify → open the exact live session → inspect → respond → let the agent keep running on the user's machine.

  • Promote /opencode from the shared agent template to a bespoke flagship page (workflow, real setup, OpenCode notifications, live-session access, local-first + open plugin transparency, focused "Connect OpenCode" CTA). Same URL — no nav/sitemap/llms.txt breakage.
  • Add /coding-agent-notifications intent page for the notification wedge.
  • Add the missing docs/guides/run-opencode-from-phone setup guide, registered first in the docs sidebar.
  • Strengthen the "Why Zedra vs the built-in Claude/Codex apps?" answer on both agent pages (real terminal + workspace, controls the agent on your machine, agent-neutral) — no unsupported competitive claims.
  • Surface OpenCode first in the mobile-agents hub, marketing footer, and llms.txt.

Homepage (index.astro) is intentionally untouched.

Notes

  • Notification copy matches shipped host hooks (crates/zedra-host/src/agent/opencode.rs): approval (permission.asked) + completion (session.idle) pushes only; error is session state, not a push. No invented commands or plugin APIs.
  • Product gaps flagged for follow-up: no error/blocked push (state-only); reused generic demo screenshots (no OpenCode-specific capture); OpenCode hooks are debug-builds-only per hooks_enabled() — confirm release builds ship them before external promotion.
  • Validation: biome ci clean (32 files); astro build 21 pages, /opencode, /coding-agent-notifications, and the guide all emit with no route collision.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added a dedicated OpenCode landing page for running OpenCode from your phone.
    • Added a step-by-step guide for connecting and controlling local OpenCode sessions from iPhone, iPad, and Android.
    • Added a new Coding Agent Notifications page explaining mobile alerts and setup.
    • Expanded navigation and workflow links for OpenCode, notifications, and mobile coding agents.
  • Documentation
    • Updated Claude Code and Codex FAQs with clarified mobile experience comparisons.
    • Added troubleshooting guidance and notification details to the OpenCode guide.

…tions

## Summary

Enter the market as the mobile companion for OpenCode and local coding
agents, without redesigning the homepage. The wedge is the blocked-agent
workflow: notify → open the exact live session → inspect → respond → let
the agent keep running on the user's machine.

- Promote `/opencode` from the shared agent template to a bespoke flagship
  page (workflow, real setup, notifications, live-session access,
  local-first + open plugin transparency, focused "Connect OpenCode" CTA).
- Add `/coding-agent-notifications` intent page for the notification wedge.
- Add the missing `docs/guides/run-opencode-from-phone` setup guide and
  register it first in the docs sidebar.
- Strengthen the "Why Zedra vs the built-in Claude/Codex apps?" answer on
  both agent pages (real terminal + workspace, your machine, agent-neutral).
- Surface OpenCode first in the mobile-agents hub, marketing footer, and
  llms.txt.

## Notes

- Notification copy matches shipped host hooks: approval
  (`permission.asked`) + completion (`session.idle`) pushes only; error is
  session state, not a push. No invented commands or plugin APIs.
- Homepage (`index.astro`) is intentionally untouched.
- Verified: biome ci clean (32 files); astro build 21 pages, `/opencode`,
  `/coding-agent-notifications`, and the guide all emit with no route
  collision.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
zedra Ready Ready Preview, Comment Jul 10, 2026 2:03pm

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Added a bespoke OpenCode-from-phone landing page, setup guide, coding-agent notifications page, navigation links, structured metadata, and updated Claude Code/Codex FAQ and AI-reference content.

Changes

OpenCode mobile content

Layer / File(s) Summary
OpenCode landing page
packages/landing/src/pages/opencode.astro
Adds workflow, setup, notifications, FAQ, structured data, rendered marketing sections, and page-specific styling for OpenCode from a phone.
OpenCode guide and discovery links
packages/landing/src/content/docs/docs/guides/run-opencode-from-phone.mdx, packages/landing/astro.config.mjs, packages/landing/src/pages/mobile-coding-agents.astro, packages/landing/src/pages/[agent].astro, packages/landing/src/layouts/MarketingLayout.astro, packages/landing/public/llms.txt
Adds the phone setup guide and exposes OpenCode and related workflow links through documentation, navigation, agent pages, footer content, and AI-reference content.
Coding-agent notifications page
packages/landing/src/pages/coding-agent-notifications.astro
Adds notification-focused marketing content, FAQ rendering, and FAQ JSON-LD metadata.
Agent positioning and reference content
packages/landing/src/agent-pages.ts, packages/landing/public/llms.txt
Updates Claude Code and Codex FAQ wording and notification-related AI-reference text.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • tanlethanh/zedra#183: Related shared footer and navigation changes, including the notifications link.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main landing-page, guide, and notifications changes.
Description check ✅ Passed The description follows the required Summary and Notes structure and includes the key implementation and follow-up details.
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.
✨ 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 tanlethanh/optimize-content

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.

@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: 2

🤖 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/landing/src/pages/opencode.astro`:
- Around line 259-262: Update the internal links in the Zedra description to use
trailing slashes: change the Claude Code and Codex href values to
`/claude-code/` and `/codex/`, respectively, matching the site’s URL convention.
- Around line 297-305: Replace the hardcoded color values in .oc-cta-primary and
its :hover rule with the appropriate existing theme CSS variables, verifying the
exact token names in docs/THEMING.md or the site's global stylesheet; preserve
the current contrast and hover appearance.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0534a9b1-7f93-4479-96da-dbd4a09d0da0

📥 Commits

Reviewing files that changed from the base of the PR and between beac8d6 and c717ebf.

📒 Files selected for processing (9)
  • packages/landing/astro.config.mjs
  • packages/landing/public/llms.txt
  • packages/landing/src/agent-pages.ts
  • packages/landing/src/content/docs/docs/guides/run-opencode-from-phone.mdx
  • packages/landing/src/layouts/MarketingLayout.astro
  • packages/landing/src/pages/[agent].astro
  • packages/landing/src/pages/coding-agent-notifications.astro
  • packages/landing/src/pages/mobile-coding-agents.astro
  • packages/landing/src/pages/opencode.astro

Comment on lines +259 to +262
Zedra is agent-neutral: the same workspace runs <a href="/claude-code">Claude Code</a>,
<a href="/codex">Codex</a>, Pi, Hermes, and any terminal-based agent. See
<a href="/coding-agent-notifications/">coding agent notifications</a> or
<a href="/mobile-coding-agents/">mobile coding agents</a> for the broader picture.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚀 Performance & Scalability | 🟡 Minor | ⚡ Quick win

Add trailing slashes to /claude-code and /codex links.

These two internal links lack trailing slashes while every other internal link in this file (and in coding-agent-notifications.astro) uses trailing slashes. Since MarketingLayout canonicalizes URLs with trailing slashes, links without them will trigger unnecessary redirects.

💚 Proposed fix
-    Zedra is agent-neutral: the same workspace runs <a href="/claude-code">Claude Code</a>,
-    <a href="/codex">Codex</a>, Pi, Hermes, and any terminal-based agent. See
+    Zedra is agent-neutral: the same workspace runs <a href="/claude-code/">Claude Code</a>,
+    <a href="/codex/">Codex</a>, Pi, Hermes, and any terminal-based agent. See
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Zedra is agent-neutral: the same workspace runs <a href="/claude-code">Claude Code</a>,
<a href="/codex">Codex</a>, Pi, Hermes, and any terminal-based agent. See
<a href="/coding-agent-notifications/">coding agent notifications</a> or
<a href="/mobile-coding-agents/">mobile coding agents</a> for the broader picture.
Zedra is agent-neutral: the same workspace runs <a href="/claude-code/">Claude Code</a>,
<a href="/codex/">Codex</a>, Pi, Hermes, and any terminal-based agent. See
<a href="/coding-agent-notifications/">coding agent notifications</a> or
<a href="/mobile-coding-agents/">mobile coding agents</a> for the broader picture.
🤖 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 `@packages/landing/src/pages/opencode.astro` around lines 259 - 262, Update the
internal links in the Zedra description to use trailing slashes: change the
Claude Code and Codex href values to `/claude-code/` and `/codex/`,
respectively, matching the site’s URL convention.

Comment on lines +297 to +305
.oc-cta-primary {
background: var(--green);
color: #06120c !important;
font-weight: 600;
}

.oc-cta-primary:hover {
background: #57e3a0;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Use theme tokens instead of hardcoded hex values.

Lines 299 and 305 use hardcoded hex values (#06120c, #57e3a0) while the rest of the file consistently uses CSS custom properties (var(--green), var(--text), etc.). As per coding guidelines, packages/landing/** views should use theme tokens rather than hardcoded hex values.

♻️ Proposed fix
 .oc-cta-primary {
   background: var(--green);
-  color: `#06120c` !important;
+  color: var(--green-text) !important;
   font-weight: 600;
 }

 .oc-cta-primary:hover {
-  background: `#57e3a0`;
+  background: var(--green-hover);
 }

Verify the exact token names in docs/THEMING.md or the site's global CSS variables.

🤖 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 `@packages/landing/src/pages/opencode.astro` around lines 297 - 305, Replace
the hardcoded color values in .oc-cta-primary and its :hover rule with the
appropriate existing theme CSS variables, verifying the exact token names in
docs/THEMING.md or the site's global stylesheet; preserve the current contrast
and hover appearance.

Source: Coding guidelines

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c717ebf7dc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

const workflow = [
{
title: "Start OpenCode at your desk",
body: "Run OpenCode in your project as usual. Zedra attaches to that session — it does not host or replace it.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Require launching OpenCode from a Zedra terminal

In the workflow where the user starts OpenCode in a normal local terminal, this promise does not hold: the hook receiver returns before updating state or notifying unless the request carries a terminal_id (crates/zedra-host/src/api.rs), and the only path I found that injects ZEDRA_TERMINAL_ID is Zedra-created PTYs (crates/zedra-host/src/rpc_daemon.rs). The zedra setup opencode global plugin invokes agent hook receive without adding a terminal id, so an OpenCode process launched “as usual” at the desk will not produce the advertised tap-to-live-session notification. Please either route hooks by OpenCode session/workdir or update the copy to require launching OpenCode from a Zedra terminal.

Useful? React with 👍 / 👎.

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