Loading...
Loading...
Use this skill when adding a new project/app to the dividend-solo portfolio site. Reads project details from the project's own repo (under ~/Developer/repos/dividendsolo/<repo>) and updates the portfolio site's ProjectsSection.tsx. Use when the user invokes /add-to-site or says "add this to the site", "add a project to the portfolio".
npx skill4agent add dividendsolo/skills add-to-site/Users/james/Developer/repos/dividendsolo/dividend-solohrefimage*.vercel.apphrefimagehrefscripts/cursor-demo.ts| Field | Where to find it |
|---|---|
| name | The display name (e.g. "EchoForm") |
| href | Deployed → production URL (e.g. |
| description | 1–2 sentence summary. If not provided, read the project's CLAUDE.md or README at |
| tech | Key libraries/services. Read |
| image | Deployed only: OG image URL. Check if the repo has |
/Users/james/Developer/repos/dividendsolo/dividend-solo/components/ProjectsSection.tsxlib/projects-data.ts{
name: "<Name>",
href: "<https://...>",
description:
"<One-line summary — key feature, key feature, key feature.>",
tech: ["Next.js", "<DB>", "<Service>", ...],
image: "<https://...>/opengraph-image", // or /og.png if static
},/Users/james/Developer/repos/dividendsolo/<repo>/app/opengraph-image.tsximport { ImageResponse } from "next/og"
export const size = { width: 1200, height: 630 }
export const contentType = "image/png"
export const alt = "<AppName> — <tagline>"
export default async function OgImage() {
return new ImageResponse(
<div
style={{
height: "100%", width: "100%", display: "flex",
flexDirection: "column", justifyContent: "space-between",
padding: 80, background: "#0a0a0a", color: "white",
fontFamily: "system-ui, -apple-system, sans-serif",
}}
>
{/* Logo mark */}
<div style={{ display: "flex", alignItems: "center", gap: 16 }}>
<div style={{
width: 56, height: 56, borderRadius: 14,
background: "<brand-color>", display: "flex",
alignItems: "center", justifyContent: "center",
fontSize: 32, fontWeight: 800, color: "#0a0a0a",
}}>
<AppInitial>
</div>
<div style={{ fontSize: 28, fontWeight: 600, letterSpacing: "-0.02em" }}>
<AppName>
</div>
</div>
{/* Headline */}
<div style={{ display: "flex", flexDirection: "column", gap: 28 }}>
<div style={{ fontSize: 88, fontWeight: 800, letterSpacing: "-0.04em", lineHeight: 1.0, display: "flex" }}>
<Line 1>
</div>
<div style={{ fontSize: 88, fontWeight: 800, letterSpacing: "-0.04em", lineHeight: 1.0, display: "flex", color: "<brand-color>" }}>
<Line 2>
</div>
</div>
{/* Footer */}
<div style={{ display: "flex", alignItems: "center", justifyContent: "space-between" }}>
<div style={{ fontSize: 26, color: "#a1a1aa", display: "flex" }}>
<domain> · <tagline>
</div>
<div style={{
display: "flex", gap: 10, background: "<brand-color>", color: "#0a0a0a",
fontSize: 26, fontWeight: 700, padding: "14px 28px", borderRadius: 999,
}}>
<span>Get started</span><span style={{ fontSize: 28 }}>→</span>
</div>
</div>
</div>,
size,
)
}app/globals.css--primarybun run typecheckcd /Users/james/Developer/repos/dividendsolo/dividend-solo
bun tsc --noEmit && bun run lintnext/imageremotePatterns/Users/james/Developer/repos/dividendsolo/dividend-solo/next.config.tsimages.remotePatterns{ protocol: "https", hostname: "<new-domain>" }sm:aspect-[1200/630]/shipit