Skip to content
This repository was archived by the owner on Jun 9, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ const geistMono = Geist_Mono({
});

export const metadata: Metadata = {
title: "InkWeave — Your Book, Finished",
description: "Submit your snippets. Get a full manuscript. No blank page. No stalling. One price, full book.",
keywords: ["write a book", "AI book writing", "finish my book", "self publishing UK", "manuscript generator"],
title: "InkWeave — Finish the book you already started",
description: "Turn scattered notes, snippets, and half-written scenes into a coherent manuscript you still control. AI-assisted, author-owned, publish-ready.",
keywords: ["finish my book", "AI book writing", "manuscript generator", "self publishing UK", "KDP", "snippet to book", "author owned AI"],
openGraph: {
title: "InkWeave — Your Book, Finished",
description: "Turn your snippets into a full manuscript. UK-built, author-first.",
title: "InkWeave — Finish the book you already started",
description: "You steer. InkWeave weaves. Snippets in, coherent manuscript out. Author-owned. KDP-aware.",
type: "website",
},
};
Expand Down
129 changes: 84 additions & 45 deletions app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,24 +25,23 @@ export default function Home() {
{/* HERO */}
<section className="px-6 py-24 max-w-4xl mx-auto text-center">
<p className="font-sans text-xs tracking-widest uppercase mb-6" style={{ color: "var(--amber)", letterSpacing: "0.3em" }}>
Built for writers who have ideas but not the time
You steer. InkWeave weaves.
</p>
<h1 className="text-5xl md:text-7xl font-bold leading-tight mb-6" style={{ lineHeight: "1.05" }}>
Your book.<br />
<span style={{ color: "var(--amber)" }}>Finished.</span>
Finish the book<br />
<span style={{ color: "var(--amber)" }}>you already started.</span>
</h1>
<p className="text-lg md:text-xl mb-10 max-w-2xl mx-auto" style={{ color: "var(--text-secondary)", lineHeight: "1.7" }}>
Drop your snippets — scenes, notes, ideas, half-written chapters.
InkWeave structures them, expands them, and delivers a complete manuscript.
No blank page. No stalling. One price.
Turn scattered notes, snippets, and half-written scenes into a coherent manuscript you still control.
AI-assisted, author-owned, publish-ready.
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<Link
href="/start"
className="px-8 py-4 text-base font-sans font-semibold transition-all hover:opacity-90"
style={{ background: "var(--amber)", color: "var(--ink)", borderRadius: "2px" }}
>
Weave your story — free chapter
Try one chapter free
</Link>
<Link
href="#how-it-works"
Expand All @@ -53,18 +52,49 @@ export default function Home() {
</Link>
</div>
<p className="mt-4 text-xs font-sans" style={{ color: "var(--text-dim)" }}>
Free chapter sample — no card required
No card required. Your manuscript. Your rights. Never used for training.
</p>
</section>

{/* BEFORE / AFTER */}
<section className="px-6 py-16 max-w-5xl mx-auto">
<p className="font-sans text-xs tracking-widest uppercase mb-3 text-center" style={{ color: "var(--amber)", letterSpacing: "0.3em" }}>
The transformation
</p>
<h2 className="text-3xl md:text-4xl font-bold text-center mb-12">
Fragments in. Manuscript out.
</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div className="p-8 font-sans text-sm leading-relaxed" style={{ background: "var(--ink-soft)", borderRadius: "2px", color: "var(--text-secondary)" }}>
<p className="text-xs uppercase tracking-widest mb-4" style={{ color: "var(--text-dim)" }}>What you have</p>
<div className="space-y-3 font-mono text-xs" style={{ color: "var(--text-secondary)" }}>
<p>&quot;She finds the key behind the painting...&quot;</p>
<p>&quot;Maya — 32, paramedic, lost a brother in 2019&quot;</p>
<p>&quot;CHAPTER 3 — confrontation at the harbour, weather should feel hostile&quot;</p>
<p>&quot;What if the journal entries are out of order on purpose?&quot;</p>
<p style={{ color: "var(--text-dim)" }}>+ 47 more notes</p>
</div>
</div>
<div className="p-8 font-sans text-sm leading-relaxed" style={{ background: "var(--paper)", color: "var(--ink)", borderRadius: "2px" }}>
<p className="text-xs uppercase tracking-widest mb-4" style={{ color: "var(--amber)" }}>What you get</p>
<p className="font-serif text-base mb-2" style={{ color: "var(--ink)" }}>Chapter Three — The Harbour</p>
<p className="font-serif italic text-sm" style={{ color: "#444" }}>
The wind off the water carried more than salt that morning. Maya pulled her collar higher and waited.
Three years since she&apos;d stood on this same pier. Three years since she&apos;d told herself she&apos;d never come back...
</p>
<p className="mt-4 text-xs" style={{ color: "#666" }}>Full manuscript: 67,200 words • 18 chapters • DOCX + PDF</p>
</div>
</div>
</section>

{/* TRUST BAR */}
<section className="py-6 border-y" style={{ borderColor: "var(--ink-muted)" }}>
<div className="max-w-4xl mx-auto px-6 flex flex-wrap justify-center gap-8 font-sans text-sm" style={{ color: "var(--text-dim)" }}>
<span>✦ 50,000–100,000 words</span>
<span>✦ DOCX + PDF download</span>
<span>✦ UK-built &amp; UK-priced</span>
<span>✦ Session remote control</span>
<span>✦ One price. Full book.</span>
<span>✦ Author-owned</span>
<span>✦ Not used for training</span>
<span>✦ AI-assisted, not AI-replacement</span>
<span>✦ KDP-aware export</span>
<span>✦ UK-built</span>
</div>
</section>

Expand Down Expand Up @@ -136,29 +166,32 @@ export default function Home() {

{/* VS COMPETITORS */}
<section className="px-6 py-20 max-w-5xl mx-auto">
<h2 className="text-3xl font-bold text-center mb-12">
Why not just use ChatGPT?
<h2 className="text-3xl font-bold text-center mb-4">
Where InkWeave sits
</h2>
<p className="text-center font-sans mb-12 max-w-2xl mx-auto" style={{ color: "var(--text-secondary)" }}>
Not &quot;AI helps you write&quot;. Not a marketplace of freelancers. The piece in between: turn fragments into a finished, author-led draft.
</p>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{[
{
label: "ChatGPT / Claude.ai",
pain: "You prompt-engineer every paragraph. No structure. No book-length output. No output file.",
verdict: "Tool, not a product",
highlight: false,
},
{
label: "Sudowrite",
pain: "Chapter-by-chapter assistant. You still write. It just helps. $29/mo before you have a word count.",
verdict: "Co-pilot, not the driver",
label: "ChatGPT · Sudowrite",
pain: "Open-ended co-writing. You still drive every paragraph. No book structure memory. No publish-ready export.",
verdict: "Co-pilot",
highlight: false,
},
{
label: "InkWeave",
pain: "Drop your snippets. Get a full manuscript. DOCX + PDF. One price. Your book, finished.",
verdict: "Your book, finished.",
pain: "Snippet in, coherent manuscript out. Steered by you. Exports retail-ready for KDP and IngramSpark.",
verdict: "Finish-the-draft engine",
highlight: true,
},
{
label: "Reedsy · Scrivener · AutoCrit",
pain: "Organise, edit, or hire after the draft exists. Assume you already have a finished manuscript.",
verdict: "Post-draft tooling",
highlight: false,
},
].map(({ label, pain, verdict, highlight }) => (
<div
key={label}
Expand Down Expand Up @@ -199,30 +232,30 @@ export default function Home() {
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{[
{
name: "Sample",
price: "Free",
sub: "No card required",
features: ["1 chapter from your snippets", "DOCX download", "See the quality before you pay"],
cta: "Start free",
href: "/start",
name: "Draft",
price: "£29",
sub: "Finish your first draft",
features: ["Full manuscript (50k+ words)", "DOCX download", "Outline review before generation", "Chapter approve & regenerate"],
cta: "Start at £29",
href: "/start?plan=draft",
featured: false,
},
{
name: "Full Book",
name: "Author",
price: "£39",
sub: "One-time per book",
features: ["Full manuscript (50k–100k words)", "DOCX + PDF", "Chapter review & approval", "UK spelling & grammar"],
sub: "Most popular — full control",
features: ["Everything in Draft", "DOCX + PDF export", "Structure repair & style control", "Revisions & re-weaves", "UK spelling & grammar"],
cta: "Get your book",
href: "/start?plan=book",
href: "/start?plan=author",
featured: true,
},
{
name: "Remote Control",
price: "£79/mo",
sub: "Unlimited books",
features: ["Everything in Full Book", "Live generation stream", "Real-time steering", "Session save & resume", "Priority queue"],
cta: "Take control",
href: "/start?plan=remote",
name: "Publish-Ready",
price: "£49",
sub: "Retail-ready bundle",
features: ["Everything in Author", "KDP/IngramSpark export", "Blurb & metadata help", "AI disclosure helper", "Quality-checked manuscript"],
cta: "Go publish-ready",
href: "/start?plan=publish",
featured: false,
},
].map(({ name, price, sub, features, cta, href, featured }) => (
Expand Down Expand Up @@ -269,9 +302,12 @@ export default function Home() {
<div className="grid grid-cols-2 md:grid-cols-3 gap-4 text-sm" style={{ color: "var(--text-secondary)" }}>
<span>✦ AI edit pass — £15</span>
<span>✦ Cover brief pack — £9</span>
<span>✦ UK Publishing Guide — £9</span>
<span>✦ Try one chapter — Free</span>
</div>
</div>
<p className="mt-4 text-center text-xs font-sans" style={{ color: "var(--text-dim)" }}>
Remote Control studio — for ghostwriters &amp; agencies — £79/mo. <Link href="/contact" className="underline">Get in touch</Link>.
</p>
</section>

{/* BOTTOM CTA */}
Expand All @@ -280,15 +316,18 @@ export default function Home() {
The book has been in your head long enough.
</h2>
<p className="font-sans text-lg mb-10" style={{ color: "var(--text-secondary)" }}>
Submit your first snippets. Get a chapter back. If it&apos;s not good, walk away — no charge.
Submit your snippets. Get a chapter back. If it isn&apos;t good, walk away — no charge, no card.
</p>
<Link
href="/start"
className="inline-block px-10 py-5 text-base font-sans font-semibold transition-all hover:opacity-90"
style={{ background: "var(--amber)", color: "var(--ink)", borderRadius: "2px" }}
>
Weave your story — free to start
Try one chapter free
</Link>
<p className="mt-6 text-xs font-sans" style={{ color: "var(--text-dim)" }}>
Author-owned · Never used for training · AI-assisted, not AI-replacement
</p>
</section>

{/* FOOTER */}
Expand Down
61 changes: 34 additions & 27 deletions app/pricing/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,58 @@ import Link from "next/link";

const plans = [
{
name: "Sample",
price: "Free",
sub: "No card required",
features: ["1 chapter from your snippets", "DOCX download", "See the quality before you pay"],
cta: "Start free",
href: "/start",
name: "Draft",
price: "£29",

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 Keep the entry price consistent

Introducing the £29 Draft plan as a full-manuscript option conflicts with the conversion form users reach from this CTA: /start still says “Full book from £39.” Anyone clicking “Start at £29” lands on a page that raises the apparent entry price, which makes the new cheapest paid plan look unavailable or misleading right at checkout intent.

Useful? React with 👍 / 👎.

sub: "Finish your first draft",
features: [
"Full manuscript (50k+ words)",
"DOCX download",
"Outline review before generation",
"Chapter approve & regenerate",
"Author-owned. Never used for training.",
],
cta: "Start at £29",
href: "/start?plan=draft",
featured: false,
},
{
name: "Full Book",
name: "Author",
price: "£39",
sub: "One-time per book",
sub: "Most popular — full control",
features: [
"Full manuscript (50k–100k words)",
"DOCX + PDF download",
"Chapter review & approval",
"UK spelling & grammar defaults",
"Outline preview before generation",
"Everything in Draft",
"DOCX + PDF export",
"Structure repair & style control",
"Revisions & re-weaves included",
"UK spelling & grammar",
"Pause, select-and-steer, branch-and-revert",
],
cta: "Get your book",
href: "/start?plan=book",
href: "/start?plan=author",
featured: true,
},
{
name: "Remote Control",
price: "£79/mo",
sub: "Unlimited books",
name: "Publish-Ready",
price: "£49",
sub: "Retail-ready bundle",
features: [
"Everything in Full Book",
"Live generation stream",
"Real-time chapter steering",
"Session save & resume",
"Priority generation queue",
"Co-author mode (coming soon)",
"Everything in Author",
"KDP/IngramSpark export profile",
"Blurb & metadata help",
"AI disclosure helper",
"Quality-checked manuscript",
"Cover brief pack included",
],
cta: "Take control",
href: "/start?plan=remote",
cta: "Go publish-ready",
href: "/start?plan=publish",
featured: false,
},
];

const addons = [
{ name: "Try one chapter", price: "Free", desc: "Submit your snippets. Get one chapter back. No card. Decide after." },
{ name: "AI edit pass", price: "£15", desc: "Style polish, grammar, pacing — applied after generation." },
{ name: "Cover brief pack", price: "£9", desc: "Midjourney-ready cover prompt pack tailored to your book." },
{ name: "UK Publishing Guide", price: "£9", desc: "ISBN, KDP, IngramSpark, distribution — complete self-pub checklist." },
{ name: "Remote Control studio", price: "£79/mo", desc: "For ghostwriters & agencies. Unlimited books, live steering, team seats." },
];

export default function PricingPage() {
Expand Down
6 changes: 3 additions & 3 deletions app/start/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@
return (
<main className="min-h-screen" style={{ background: "var(--ink)", color: "var(--text-primary)" }}>
<nav className="flex items-center justify-between px-6 py-5 max-w-6xl mx-auto">
<a href="/" className="text-xl tracking-widest uppercase font-sans" style={{ color: "var(--amber)", letterSpacing: "0.2em" }}>

Check failure on line 5 in app/start/page.tsx

View workflow job for this annotation

GitHub Actions / check

Do not use an `<a>` element to navigate to `/`. Use `<Link />` from `next/link` instead. See: https://nextjs.org/docs/messages/no-html-link-for-pages
InkWeave
</a>
</nav>

<section className="px-6 py-16 max-w-2xl mx-auto">
<p className="font-sans text-xs tracking-widest uppercase mb-3" style={{ color: "var(--amber)", letterSpacing: "0.3em" }}>
Step 1 of 3
Step 1 of 3 · No card required
</p>
<h1 className="text-3xl md:text-4xl font-bold mb-4">
Submit your snippets
Try one chapter free
</h1>
<p className="font-sans mb-10" style={{ color: "var(--text-secondary)" }}>
Paste anything — scenes, notes, ideas, half-written chapters. One sentence or ten pages.
InkWeave will read it all and build your book from it.
We&apos;ll generate one full chapter from your material. You decide what happens next.
</p>

<form className="flex flex-col gap-6">
Expand Down
Loading