Skip to content
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
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export default async function EmailBroadcastPage() {
<div className="mx-auto max-w-2xl space-y-8">
<div>
<Link
href="/admin"
href="/dashboard/admin"
className="text-sm text-[var(--color-muted)] hover:opacity-80"
>
← Admin
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export function SetupDoneClient() {
Install App →
</a>
. End users do the same from their{" "}
<a className="underline" href="/settings/integrations/github">
<a className="underline" href="/dashboard/settings/integrations/github">
personal GitHub settings page
</a>
.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export default async function AdminGithubSetupDonePage() {
return (
<main className="mx-auto max-w-3xl px-4 py-12 sm:px-6">
<p className="text-sm">
<Link href="/admin" className="text-[var(--color-muted)] hover:underline">
<Link href="/dashboard/admin" className="text-[var(--color-muted)] hover:underline">
← Admin
</Link>
</p>
Expand All @@ -39,7 +39,7 @@ export default async function AdminGithubSetupDonePage() {
Copy each value into Railway, set them on both the Next.js app
and the worker service, then redeploy. After deploy, end users
can install the App from their own{" "}
<Link className="underline" href="/settings/integrations/github">
<Link className="underline" href="/dashboard/settings/integrations/github">
GitHub settings page
</Link>
.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ export default async function AdminGithubSetupPage({
return (
<main className="mx-auto max-w-3xl px-4 py-12 sm:px-6">
<p className="text-sm">
<Link href="/admin" className="text-[var(--color-muted)] hover:underline">
<Link href="/dashboard/admin" className="text-[var(--color-muted)] hover:underline">
← Admin
</Link>
</p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ export default async function AdminLeadsPage() {
<main className="mx-auto max-w-6xl px-4 py-10 sm:px-6">
<div className="flex items-baseline justify-between gap-4">
<h1 className="text-3xl font-bold">Leads</h1>
<Link href="/admin" className="text-sm text-[var(--color-muted)] hover:underline">
<Link href="/dashboard/admin" className="text-sm text-[var(--color-muted)] hover:underline">
← Admin
</Link>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ export default async function AdminPage() {
URLs, and live audience counts per segment.
</p>
</div>
<a href="/admin/leads" className="btn btn-primary whitespace-nowrap">
<a href="/dashboard/admin/leads" className="btn btn-primary whitespace-nowrap">
Open leads dashboard →
</a>
</div>
Expand All @@ -117,7 +117,7 @@ export default async function AdminPage() {
the App from their own settings page after the env is set.
</p>
</div>
<Link href="/admin/github/setup" className="btn btn-primary text-sm">
<Link href="/dashboard/admin/github/setup" className="btn btn-primary text-sm">
{env.githubAppId ? "Re-register App" : "Register App"}
</Link>
</div>
Expand All @@ -135,7 +135,7 @@ export default async function AdminPage() {
<h2 className="text-lg font-semibold">Email broadcast</h2>
<p className="mt-1 text-sm text-[var(--color-muted)]">Send a mass email to all registered users.</p>
<div className="mt-4">
<Link href="/admin/email-broadcast" className="text-sm font-semibold underline hover:opacity-80">
<Link href="/dashboard/admin/email-broadcast" className="text-sm font-semibold underline hover:opacity-80">
Compose &amp; send →
</Link>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export default async function EditCampaignPage({

return (
<div className="mx-auto max-w-4xl">
<Link href={`/ads/${id}`} className="text-sm text-[var(--color-muted)]">
<Link href={`/dashboard/ads/${id}`} className="text-sm text-[var(--color-muted)]">
← Campaign
</Link>
<div className="mt-4 flex items-center justify-between gap-3">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ export default async function CampaignDetailPage({

return (
<div className="mx-auto max-w-4xl">
<Link href="/ads" className="text-sm text-[var(--color-muted)]">
<Link href="/dashboard/ads" className="text-sm text-[var(--color-muted)]">
← Ad campaigns
</Link>

Expand All @@ -129,7 +129,7 @@ export default async function CampaignDetailPage({
<span className="badge whitespace-nowrap" title={display.hint}>
{display.label}
</span>
<Link href={`/ads/${id}/edit`} className="btn text-sm">
<Link href={`/dashboard/ads/${id}/edit`} className="btn text-sm">
Edit
</Link>
<RegenerateButton id={id} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export default async function EarningsPage() {

return (
<div className="mx-auto max-w-4xl">
<Link href="/ads" className="text-sm text-[var(--color-muted)]">
<Link href="/dashboard/ads" className="text-sm text-[var(--color-muted)]">
← Ad campaigns
</Link>
<div className="mt-4 flex flex-wrap items-center justify-between gap-3">
Expand Down Expand Up @@ -83,7 +83,7 @@ export default async function EarningsPage() {
{model.slots.length === 0 ? (
<div className="card mt-3 p-6 text-center text-sm text-[var(--color-muted)]">
No monetized sites yet.{" "}
<Link href="/ads/slots" className="text-[var(--color-accent)]">
<Link href="/dashboard/ads/slots" className="text-[var(--color-accent)]">
Monetize a site
</Link>
.
Expand Down Expand Up @@ -126,7 +126,7 @@ export default async function EarningsPage() {
{model.campaigns.length === 0 ? (
<div className="card mt-3 p-6 text-center text-sm text-[var(--color-muted)]">
No ad campaigns yet.{" "}
<Link href="/ads/new" className="text-[var(--color-accent)]">
<Link href="/dashboard/ads/new" className="text-[var(--color-accent)]">
Create an ad
</Link>
.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export function NewAdForm() {
setError(res.error);
return;
}
router.push(`/ads?created=${res.refSlug}`);
router.push(`/dashboard/ads?created=${res.refSlug}`);
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export default async function NewAdPage() {

return (
<div className="mx-auto max-w-4xl">
<Link href="/ads" className="text-sm text-[var(--color-muted)]">
<Link href="/dashboard/ads" className="text-sm text-[var(--color-muted)]">
← Ad campaigns
</Link>
<h1 className="mt-4 text-3xl font-bold">Create an ad</h1>
Expand All @@ -42,7 +42,7 @@ export default async function NewAdPage() {
<div className="mt-4 rounded-lg border border-[var(--color-accent)]/40 bg-[var(--color-accent)]/10 p-3 text-sm">
🎁 <strong>Launch offer:</strong> your first deposit is matched 100% in bonus ad
credits (up to $100 free).{" "}
<Link href="/settings/billing" className="underline">
<Link href="/dashboard/settings/billing" className="underline">
Add credits
</Link>
.
Expand Down
14 changes: 7 additions & 7 deletions app/(app)/ads/page.tsx → app/(app)/dashboard/ads/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,13 @@ export default async function AdsPage({
<div className="flex items-center justify-between">
<h1 className="text-3xl font-bold">Ad campaigns</h1>
<div className="flex items-center gap-2">
<Link href="/ads/earnings" className="btn">
<Link href="/dashboard/ads/earnings" className="btn">
Earnings &amp; reports
</Link>
<Link href="/ads/slots" className="btn">
<Link href="/dashboard/ads/slots" className="btn">
Monetize a site
</Link>
<Link href="/ads/new" className="btn btn-primary">
<Link href="/dashboard/ads/new" className="btn btn-primary">
Create an ad
</Link>
</div>
Expand Down Expand Up @@ -168,7 +168,7 @@ export default async function AdsPage({
{campaigns.length === 0 ? (
<div className="card mt-6 p-8 text-center text-[var(--color-muted)]">
No campaigns yet.{" "}
<Link href="/ads/new" className="text-[var(--color-accent)]">
<Link href="/dashboard/ads/new" className="text-[var(--color-accent)]">
Create your first ad
</Link>
.
Expand All @@ -185,7 +185,7 @@ export default async function AdsPage({
<li key={c.id} className="card p-4">
<div className="flex items-center justify-between gap-4">
<div className="min-w-0">
<Link href={`/ads/${c.id}`} className="block truncate font-semibold hover:text-[var(--color-accent)]">
<Link href={`/dashboard/ads/${c.id}`} className="block truncate font-semibold hover:text-[var(--color-accent)]">
{c.name}
</Link>
<div className="truncate text-sm text-[var(--color-muted)]">
Expand All @@ -194,13 +194,13 @@ export default async function AdsPage({
</div>
</div>
<div className="flex items-center gap-3">
<Link href={`/ads/${c.id}`} className="hidden sm:block" aria-label="View campaign">
<Link href={`/dashboard/ads/${c.id}`} className="hidden sm:block" aria-label="View campaign">
<MiniTrend data={seriesById.get(c.id) ?? []} />
</Link>
<span className="badge whitespace-nowrap" title={display.hint}>
{display.label}
</span>
<Link href={`/ads/${c.id}/edit`} className="btn text-sm">
<Link href={`/dashboard/ads/${c.id}/edit`} className="btn text-sm">
Edit
</Link>
<CampaignActions id={c.id} status={c.status} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,19 +92,19 @@ export default async function SlotsPage() {

return (
<div className="mx-auto max-w-3xl">
<Link href="/ads" className="text-sm text-[var(--color-muted)]">
<Link href="/dashboard/ads" className="text-sm text-[var(--color-muted)]">
← Ad campaigns
</Link>
<div className="mt-4 flex flex-wrap items-center justify-between gap-3">
<h1 className="text-3xl font-bold">Monetize your site</h1>
<div className="flex items-center gap-2">
<Link href="/ads/earnings" className="btn whitespace-nowrap">
<Link href="/dashboard/ads/earnings" className="btn whitespace-nowrap">
Earnings &amp; reports
</Link>
{/* Always-visible way to add a site to monetize — a site is a project,
so this starts the project-creation flow. Previously the only link
to it was hidden inside the empty state. */}
<Link href="/projects/new?next=/ads/slots" className="btn btn-primary whitespace-nowrap">
<Link href="/dashboard/projects/new?next=/ads/slots" className="btn btn-primary whitespace-nowrap">
Monetize a new site
</Link>
</div>
Expand All @@ -118,7 +118,7 @@ export default async function SlotsPage() {
{projects.length === 0 ? (
<div className="card mt-6 p-8 text-center text-[var(--color-muted)]">
No sites yet — a site is a CrawlProof project.{" "}
<Link href="/projects/new?next=/ads/slots" className="text-[var(--color-accent)]">
<Link href="/dashboard/projects/new?next=/ads/slots" className="text-[var(--color-accent)]">
Add one
</Link>{" "}
to enable a slot.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ export default async function PortfolioAnalyticsPage({
<section className="card p-4">
<p className="text-sm text-[var(--color-muted)]">
No projects yet.{" "}
<Link href="/projects/new" className="underline hover:text-[var(--color-fg)]">
<Link href="/dashboard/projects/new" className="underline hover:text-[var(--color-fg)]">
Add your first property
</Link>{" "}
to start seeing portfolio-wide analytics.
Expand Down Expand Up @@ -578,7 +578,7 @@ function ProjectTrendTable({ rows }: { rows: ProjectRow[] }) {
>
<td className="py-2 pr-3">
<Link
href={`/projects/${project.id}/stats`}
href={`/dashboard/projects/${project.id}/stats`}
className="flex items-center gap-2 hover:underline"
>
<ProjectLogo
Expand Down Expand Up @@ -681,7 +681,7 @@ function analyticsHref(days: Range, organizationId: string | null) {
if (days !== DEFAULT_RANGE) params.set("days", String(days));
if (organizationId) params.set("org", organizationId);
const query = params.toString();
return `/analytics${query ? `?${query}` : ""}`;
return `/dashboard/analytics${query ? `?${query}` : ""}`;
}

function parseRange(value: string | undefined): Range {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ export default async function AuditPage({
.eq("audit_id", diff);
return (
<div className="space-y-6">
<Link href={`/audits/${id}`} className="text-sm text-[var(--color-muted)]">
<Link href={`/dashboard/audits/${id}`} className="text-sm text-[var(--color-muted)]">
← Back to report
</Link>
<DiffView
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ export default async function AutoblogRedirectPage() {
projectColumns: "id",
siteColumns: "id",
});
if (!project) redirect("/projects/new");
redirect(`/projects/${project.id}/autoblog`);
if (!project) redirect("/dashboard/projects/new");
redirect(`/dashboard/projects/${project.id}/autoblog`);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ export const metadata = {
};

export default function GithubDashboardPage() {
redirect("/settings/integrations/github");
redirect("/dashboard/settings/integrations/github");
}
8 changes: 4 additions & 4 deletions app/(app)/dashboard/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ export default async function DashboardPage({
<div className="space-y-10">
<section className="flex items-center justify-between">
<h1 className="text-3xl font-bold">Dashboard</h1>
<Link href="/projects/new" className="btn btn-primary">
<Link href="/dashboard/projects/new" className="btn btn-primary">
New project
</Link>
</section>
Expand Down Expand Up @@ -191,7 +191,7 @@ export default async function DashboardPage({
<ul className="grid gap-3 md:grid-cols-2">
{projects.map((p) => (
<li key={p.id} className="card p-4">
<Link href={`/projects/${p.id}`} className="block">
<Link href={`/dashboard/projects/${p.id}`} className="block">
<div className="flex items-start justify-between gap-3">
<div className="flex min-w-0 items-center gap-3">
<ProjectLogo
Expand Down Expand Up @@ -279,7 +279,7 @@ export default async function DashboardPage({
{status === "active" ? (
<>
No projects yet.{" "}
<Link href="/projects/new" className="underline">
<Link href="/dashboard/projects/new" className="underline">
Create one
</Link>
.
Expand All @@ -298,7 +298,7 @@ export default async function DashboardPage({
{audits.map((a) => (
<li key={a.id} className="card flex items-center justify-between p-3">
<div>
<Link href={`/audits/${a.id}`} className="font-medium hover:underline">
<Link href={`/dashboard/audits/${a.id}`} className="font-medium hover:underline">
{a.target_url}
</Link>
<div className="text-xs text-[var(--color-muted)]">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export default async function AutoblogArticlePage({
<div className="mx-auto max-w-3xl space-y-6">
<div>
<Link
href={`/projects/${projectId}/autoblog/history`}
href={`/dashboard/projects/${projectId}/autoblog/history`}
className="text-sm text-[var(--color-muted)]"
>
← Article history
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ export default async function AutoblogBacklinksPage({
domain: string;
blog_root_url: string | null;
} | null;
if (!site) redirect(`/projects/${projectId}/autoblog/setup`);
if (!site) redirect(`/dashboard/projects/${projectId}/autoblog/setup`);
const currentSitePublic = { blog_root_url: site.blog_root_url };

const svc = serviceClient();
Expand Down Expand Up @@ -197,7 +197,7 @@ export default async function AutoblogBacklinksPage({
<div className="mx-auto max-w-5xl space-y-8">
<div>
<Link
href={`/projects/${projectId}/autoblog`}
href={`/dashboard/projects/${projectId}/autoblog`}
className="text-sm text-[var(--color-muted)]"
>
← Autoblog
Expand All @@ -209,13 +209,13 @@ export default async function AutoblogBacklinksPage({
</div>

<nav className="flex flex-wrap gap-2 text-sm">
<Link href={`/projects/${projectId}/autoblog/history`} className="btn">
<Link href={`/dashboard/projects/${projectId}/autoblog/history`} className="btn">
History
</Link>
<Link href={`/projects/${projectId}/autoblog/backlinks`} className="btn btn-primary">
<Link href={`/dashboard/projects/${projectId}/autoblog/backlinks`} className="btn btn-primary">
Backlinks
</Link>
<Link href={`/projects/${projectId}/autoblog/setup`} className="btn">
<Link href={`/dashboard/projects/${projectId}/autoblog/setup`} className="btn">
Settings
</Link>
</nav>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ function TopicAction({
<span className="badge badge-pass text-xs">generated</span>
{req.article_id && (
<Link
href={`/projects/${projectId}/autoblog/articles/${req.article_id}`}
href={`/dashboard/projects/${projectId}/autoblog/articles/${req.article_id}`}
className="btn text-xs"
>
View
Expand Down
Loading
Loading