seedproject-web/app/src/pages/admin/projects/index.astro
Carlos Arias a88cc41557 admin: New Project page with agent-drafted copy + full editor
- /admin/projects/new: name, category, description draft, agent prompt,
  image upload, Instagram link
- console /draft endpoint: one-shot Claude copy drafting (summary/lede/body)
- editor now edits all project text fields, not just gallery
- adminprojects create() + expanded save()
2026-07-23 23:23:33 +00:00

48 lines
2 KiB
Text

---
import AdminLayout from "../../../layouts/AdminLayout.astro";
---
<AdminLayout title="Projects">
<div style="display:flex;align-items:baseline;gap:1.25rem">
<h1>Projects</h1>
<a href="/admin/projects/new" class="btn" style="margin-left:auto;text-decoration:none">+ New project</a>
</div>
<p class="lead">Edit content, galleries, and Instagram reels — or create a new project.</p>
<div id="list" style="display:flex;flex-direction:column">Loading…</div>
<style>
.prow { display:flex; align-items:center; gap:1rem; padding:1.1rem 0; border-top:1px solid var(--rule);
text-decoration:none; color:inherit; }
.prow:last-child { border-bottom:1px solid var(--rule); }
.prow .t { font-family:var(--serif); font-size:1.25rem; }
.prow .meta { margin-left:auto; display:flex; gap:1.25rem; font-family:var(--mono); font-size:.68rem;
letter-spacing:.06em; color:var(--ink4); }
.prow .meta .on { color:var(--seal); }
.prow:hover .t { text-decoration:underline; }
</style>
<script>
const list = document.getElementById("list");
(async () => {
try {
const r = await fetch("/api/adminprojects/list", { credentials: "same-origin" });
const d = await r.json();
if (!d?.data?.projects) { list.textContent = "Couldn't load projects."; return; }
list.innerHTML = "";
for (const p of d.data.projects) {
const a = document.createElement("a");
a.href = "/admin/projects/edit?slug=" + encodeURIComponent(p.slug);
a.className = "prow";
a.innerHTML =
`<span class="t">${p.title}</span>
<span class="meta">
<span class="${p.galleryFilled ? "on" : ""}">${p.galleryFilled}/${p.gallery} images</span>
<span class="${p.hasInstagram ? "on" : ""}">${p.hasInstagram ? "Reel ✓" : "No reel"}</span>
</span>`;
list.appendChild(a);
}
} catch { list.textContent = "Couldn't load projects."; }
})();
</script>
</AdminLayout>