Skip to content

Add PR Agent landing page - #60

Merged
prathamdby merged 2 commits into
mainfrom
pd/feat/pr-agent-landing
Jun 5, 2026
Merged

Add PR Agent landing page#60
prathamdby merged 2 commits into
mainfrom
pd/feat/pr-agent-landing

Conversation

@prathamdby

@prathamdby prathamdby commented Jun 5, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add static Next.js marketing site under site/ with hero, features, screenshots, quickstart, and competitor comparison
  • Optimize for SEO/GEO with metadata, FAQ, JSON-LD structured data, and competitor-targeted copy
  • Add logo, custom OG image generator, and screenshot gallery from README assets
  • Wire site/ into pnpm workspace with root site:* scripts and a CI build job
  • Add MIT LICENSE

Test plan

  • pnpm run site:build succeeds
  • CI site job passes
  • Landing copy and nav render correctly locally (pnpm run site:dev)

PR Agent Description

PR Type

Enhancement, Documentation

Description

  • Add Next.js 16 static site under site/ with Tailwind CSS v4
  • Include SEO content, screenshot gallery, FAQ, alternatives comparison, and quickstart
  • Add root npm scripts (site:dev, site:build, site:generate-og) and CI job
  • Register site as pnpm workspace member and add MIT LICENSE

Changes Diagram

flowchart LR
  A["pnpm workspace + site"] --> B["Next.js static export build"]
  B --> C["Landing page with sections"]
  C --> D["CI site job on push"]
  E["Root scripts"] --> B
  F["SEO + JSON-LD"] --> C
  G["Screenshot gallery"] --> C
Loading

File Walkthrough

Enhancement (19 files)
Landing page entry point

site/app/page.tsx

  • Composes all sections: Header, Hero, Features, Capabilities, Gallery, Providers, Alternatives, FAQ, Quickstart, Footer
  • Includes JSON-LD structured data
Hero section with CTA

site/components/hero.tsx

  • Title, subtitle, and two CTA buttons (Get started, See examples)
  • Links to docs and examples anchor
How AI code review works

site/components/features.tsx

  • Describes webhook intake, self-hosted deployment, AI investigation, slash commands, large PR handling
GitHub PR review features list

site/components/capabilities.tsx

  • Lists review, describe, security review, quality review, Q&A, docs-only fast path
  • Shows trigger mechanism for each capability
Screenshot gallery of slash commands

site/components/gallery.tsx

  • Five example screenshots: /review, /describe, /ask, /review-security, /review-quality
  • Lazy-loaded Next.js Image components
AI model provider options

site/components/providers.tsx

  • Lists Pi (default) with OpenAI/Anthropic/Google/etc and Cursor SDK
  • Emphasizes bring-your-own-model flexibility
Comparison table vs competitors

site/components/alternatives.tsx

  • Side-by-side table: PR Agent, CodeRabbit, Greptile, Cursor Bugbot, Macroscope
  • Shows deployment type and key differentiator per tool
FAQ section from SEO data

site/components/faq.tsx

  • Eight questions covering product identity, comparisons, licensing, model support, platform support
  • Rendered as definition list from shared data
Docker Compose deployment guide

site/components/quickstart.tsx

  • GitHub App creation steps, Docker Compose commands, slash command examples
  • Minimal env example with provider configuration
SEO constants and JSON-LD graph data

site/lib/seo.ts

  • Product name, title, description, keywords arrays
  • FAQ items, alternative comparison rows, and five JSON-LD graph nodes
  • SoftwareApplication, WebSite, Organization, FAQPage, ItemList schemas
Shared site URLs

site/lib/site.ts

  • REPO_URL, DOCS_URL, LICENSE_URL constants used across components
Structured data injection

site/components/json-ld.tsx

  • Injects @graph JSON-LD script tag with all five schema nodes
  • Strips per-node @context before merging
Root layout with full SEO metadata

site/app/layout.tsx

  • OpenGraph, Twitter card, robots, icons metadata
  • Sets font family and antialiasing
Static export configuration

site/next.config.ts

  • Output: export with unoptimized images for static hosting
OG image generator script

site/scripts/generate-og-image.mjs

  • Uses sharp to composite logo + text on gradient background
  • Outputs 1200x630 og-image.png
Root scripts for site workflows

package.json

  • site:dev, site:build, site:generate-og using pnpm filter for pr-agent-landing
CI job for site build

.github/workflows/ci.yml

  • New site job: checkout, corepack enable, pnpm install, site:build
  • Runs on ubuntu-latest with Node 22
Add site to pnpm workspace

pnpm-workspace.yaml

  • Adds site directory to packages list
Ignore site build outputs

.gitignore

  • Adds site/out/ and site/.next/ to gitignore
  • Anchors package-lock.json to root only
Documentation (1 file)
MIT License file

LICENSE

  • Copyright 2026 prathamdby, standard MIT terms

- Add static Next.js marketing site under site/
- Add SEO/GEO content with FAQ and competitor comparison
- Add custom OG image generator and pnpm workspace integration
- Add MIT LICENSE and CI site build job
@zeus-review

zeus-review Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

PR Agent Review

Note

This PR adds a Next.js static landing page site for PR Agent (under site/), configures it as a pnpm workspace package, adds a CI job to build the site, and includes supporting files: Tailwind CSS, TypeScript config, Vercel deployment config, OG image generation script, and an MIT LICENSE file.

EffortModerate · 2/5
P1Missing metadataBase breaks OG/Twitter image URLs
On the diff · site/app/layout.tsx · line 7
Fix prompt on the inline thread.
P2Missing canonical URL and openGraph.url metadata
On the diff · site/app/layout.tsx · line 7
Fix prompt on the inline thread.
Relevant testsno
Securitynull
Follow-upsThe CI `site` job runs `pnpm run site:build` without any cache/artifact upload step — consider adding artifact upload of the `site/out/` directory for deployment verification.
Follow-upsConsider adding a `metadata.verification` block with Google Search Console verification or similar if SEO is a goal for the landing page.
Follow-upsThe `resolveSiteOrigin()` fallback to `http://localhost:3000` could ship to production if env vars are missing at build time — consider a build-time assertion or explicit error if deployed without a known origin.

@zeus-review zeus-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Note

Full review is in the PR conversation. Expand below to copy fixes for your coding agent.

Fix all findings (agent prompt)
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate.

Repository: prathamdby/pr-agent
Pull request: #60
Head SHA: effa14dad4ce4e1204d6631d34785d3191175453

Findings:

[P1] @site/public/sitemap.xml line 4
Replace the relative `<loc>/</loc>` with an absolute URL including the deployed domain, or add a site URL constant and use it here. E.g., `<loc>https://pr-agent.example.com/</loc>`.

Comment thread site/public/sitemap.xml Outdated
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>/</loc>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 · Sitemap contains a relative URL — will be ignored by search engines

site/public/sitemap.xml · line 4

The sitemaps.org protocol requires absolute URLs in <loc> elements (e.g., https://example.com/). The current value </loc> is a relative path. Search engines will reject or silently ignore this sitemap entry because they cannot resolve the relative URL against a canonical domain — the site has no canonical URL configured in the sitemap or Next.js metadata. This means the landing page will not be properly indexed via the sitemap.

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

Repository: prathamdby/pr-agent
Pull request: #60
Head SHA: effa14dad4ce4e1204d6631d34785d3191175453

[P1] @site/public/sitemap.xml line 4
Replace the relative `<loc>/</loc>` with an absolute URL including the deployed domain, or add a site URL constant and use it here. E.g., `<loc>https://pr-agent.example.com/</loc>`.

- Add deployment config with custom build steps
- Replace static robots.txt and sitemap.xml with dynamic Next.js routes
- Add SITE_ORIGIN resolution for production and preview URLs
- Fix OG image script to preserve logo aspect ratio
- Fix next-env.d.ts type reference path
- Move engines field in package.json for consistency
- Apply code formatting across site components and styles
@prathamdby
prathamdby merged commit c3ac7b3 into main Jun 5, 2026
4 checks passed
@prathamdby
prathamdby deleted the pd/feat/pr-agent-landing branch June 5, 2026 23:09

@zeus-review zeus-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

View the updated review.

Fix all findings (agent prompt)
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate.

Repository: prathamdby/pr-agent
Pull request: #60
Head SHA: b0806c4090c5c5f35e006828bf5a4e91672c5cb1

Findings:

[P1] @site/app/layout.tsx line 7
Add `metadataBase: new URL(SITE_ORIGIN)` to the metadata export so that relative image paths in openGraph and twitter are resolved to absolute URLs.

[P2] @site/app/layout.tsx line 7
Add `alternates: { canonical: '/' }` and `url: SITE_ORIGIN` to the `openGraph` object in the metadata export.

Comment thread site/app/layout.tsx

export const metadata: Metadata = {
title: {
default: SEO_TITLE,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 · Missing metadataBase breaks OG/Twitter image URLs

site/app/layout.tsx · line 7

The metadata export in layout.tsx uses relative paths for openGraph.images (line 37: "/og-image.png") and twitter.images (line 46: ["/og-image.png"]). Next.js requires either absolute URLs or a metadataBase to resolve these to fully-qualified URLs. Without metadataBase, the generated Open Graph and Twitter card <meta> tags will contain relative image URLs (e.g. og:image will be /og-image.png instead of https://example.com/og-image.png), causing social sharing previews to display broken images. Additionally, per Next.js docs, this may cause a build error in some versions. The SITE_ORIGIN value from site/lib/site.ts should be used as metadataBase.

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

Repository: prathamdby/pr-agent
Pull request: #60
Head SHA: b0806c4090c5c5f35e006828bf5a4e91672c5cb1

[P1] @site/app/layout.tsx line 7
Add `metadataBase: new URL(SITE_ORIGIN)` to the metadata export so that relative image paths in openGraph and twitter are resolved to absolute URLs.

Comment thread site/app/layout.tsx

export const metadata: Metadata = {
title: {
default: SEO_TITLE,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 · Missing canonical URL and openGraph.url metadata

site/app/layout.tsx · line 7

The layout metadata does not set metadata.alternates.canonical or openGraph.url. Without a canonical URL, search engines may not correctly associate the landing page with its canonical origin, and the og:url meta tag will be omitted from social sharing cards. This reduces SEO effectiveness. The SITE_ORIGIN constant from @/lib/site should be wired into both fields.

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

Repository: prathamdby/pr-agent
Pull request: #60
Head SHA: b0806c4090c5c5f35e006828bf5a4e91672c5cb1

[P2] @site/app/layout.tsx line 7
Add `alternates: { canonical: '/' }` and `url: SITE_ORIGIN` to the `openGraph` object in the metadata export.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant