[object Object]

← back to IWasCute

iwascute: add FAQ page (content depth), wire into footer + sitemap, scaffold canonical rsync .deploy.conf (TK-11412 AdSense readiness)

c6ece766b5a606e5572fc836cd696ed273cde0d5 · 2026-09-10 13:03:14 -0700 · Steve Abrams

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QTGuKtAvmVMngA9PyTiftG

Files touched

Diff

commit c6ece766b5a606e5572fc836cd696ed273cde0d5
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 10 13:03:14 2026 -0700

    iwascute: add FAQ page (content depth), wire into footer + sitemap, scaffold canonical rsync .deploy.conf (TK-11412 AdSense readiness)
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01QTGuKtAvmVMngA9PyTiftG
---
 .deploy.conf                         | 13 ++++++
 public/sitemap.xml                   |  5 +++
 src/app/faq/page.tsx                 | 83 ++++++++++++++++++++++++++++++++++++
 src/components/shared/SiteFooter.tsx |  1 +
 4 files changed, 102 insertions(+)

diff --git a/.deploy.conf b/.deploy.conf
new file mode 100644
index 0000000..50525ad
--- /dev/null
+++ b/.deploy.conf
@@ -0,0 +1,13 @@
+# Canonical Kamatera deploy config for IWasCute (consumed by ~/Projects/_shared/scripts/deploy.sh)
+# NOTE (TK-11412): the local ecosystem.config.js names the pm2 process "iwascute",
+# but the fleet-registry manifest lists the LIVE process as "gap-iwascute".
+# deploy.sh fails-closed if PROJECT_NAME doesn't match a running pm2 process
+# (it aborts rather than half-deploying), so confirm the live name before deploy:
+#   ssh root@45.61.58.125 'pm2 ls | grep -i iwascute'
+# If the live name is gap-iwascute, run:  PROJECT_NAME=gap-iwascute bash ~/Projects/_shared/scripts/deploy.sh
+PROJECT_NAME=iwascute
+DEPLOY_HOST=45.61.58.125
+DEPLOY_PATH=/root/Projects/iwascute
+INSTALL_CMD="npm ci"
+BUILD_CMD="npm run build"
+HEALTH_URL=http://localhost:7450/
diff --git a/public/sitemap.xml b/public/sitemap.xml
index a9674ac..116aeee 100644
--- a/public/sitemap.xml
+++ b/public/sitemap.xml
@@ -15,6 +15,11 @@
     <changefreq>monthly</changefreq>
     <priority>0.8</priority>
   </url>
+  <url>
+    <loc>https://iwascute.com/faq</loc>
+    <changefreq>monthly</changefreq>
+    <priority>0.6</priority>
+  </url>
   <url>
     <loc>https://iwascute.com/browse</loc>
     <changefreq>weekly</changefreq>
diff --git a/src/app/faq/page.tsx b/src/app/faq/page.tsx
new file mode 100644
index 0000000..ea0457c
--- /dev/null
+++ b/src/app/faq/page.tsx
@@ -0,0 +1,83 @@
+import type { Metadata } from 'next'
+import Link from 'next/link'
+import Navbar from '@/components/shared/Navbar'
+
+export const metadata: Metadata = {
+  title: 'FAQ — I was Cute',
+  description:
+    'Answers to common questions about licensing your childhood photos on I was Cute: rights, royalties, consent, removal, and how the review process works.',
+}
+
+const FAQS: { q: string; a: string }[] = [
+  {
+    q: 'Do I keep ownership of my photos?',
+    a: 'Yes. You are always the owner. I was Cute lets you license the use of a photo — you are never asked to sell or sign away the image itself, and you can withdraw a photo from the marketplace at any time.',
+  },
+  {
+    q: 'How do I earn money?',
+    a: 'When a licensee pays to use a photo you have listed, you receive a royalty on that license. You set the license types you allow up front, so you only ever earn from uses you have approved.',
+  },
+  {
+    q: 'What kinds of licenses can I choose?',
+    a: 'Each photo can be offered for editorial use, commercial use, or excluded from AI-training use entirely. You pick the boundaries that you are comfortable with before anything is listed.',
+  },
+  {
+    q: 'What happens after I upload a photo?',
+    a: 'Every submission goes through a copyright and likeness-release check before it can be listed. Nothing is offered for license until the rights are clear, so a photo is never published the instant you upload it.',
+  },
+  {
+    q: 'Whose photos can I upload?',
+    a: 'Only photos you hold the rights to and that show people who have consented to being listed. We do not accept images of people who have not agreed, and we do not knowingly handle photos of children under 13 for licensing.',
+  },
+  {
+    q: 'How do I get a photo removed?',
+    a: 'Email us at info@iwascute.com and we will take it down. We honor every removal request, and you can also request access to, correction of, or deletion of any information you have submitted.',
+  },
+  {
+    q: 'Is my personal information sold?',
+    a: 'No. Information you submit through a form is used only to respond to you and operate the service, and is retained only as long as needed. See our Privacy Policy for the full detail on data and advertising cookies.',
+  },
+]
+
+export default function FAQPage() {
+  return (
+    <>
+      <Navbar />
+      <main
+        className="flex-1 px-6 py-16 md:px-12"
+        style={{ background: 'var(--color-cream)', color: 'var(--color-brown)' }}
+      >
+        <div className="mx-auto max-w-2xl">
+          <p
+            className="text-xs uppercase tracking-[0.2em] mb-3"
+            style={{ color: 'var(--color-warm-gray)' }}
+          >
+            FAQ
+          </p>
+          <h1 className="text-4xl font-black tracking-tighter mb-10">
+            Frequently asked questions
+          </h1>
+
+          <div className="flex flex-col gap-8">
+            {FAQS.map(({ q, a }) => (
+              <section key={q}>
+                <h2 className="text-lg font-bold mb-2">{q}</h2>
+                <p className="leading-relaxed" style={{ color: 'var(--color-warm-gray)' }}>
+                  {a}
+                </p>
+              </section>
+            ))}
+          </div>
+
+          <p className="text-sm mt-12" style={{ color: 'var(--color-warm-gray)' }}>
+            Still have a question?{' '}
+            <Link href="/contact" className="underline hover:opacity-70">
+              Contact us
+            </Link>
+            .
+          </p>
+        </div>
+      </main>
+    </>
+  )
+}
diff --git a/src/components/shared/SiteFooter.tsx b/src/components/shared/SiteFooter.tsx
index 5ef41ab..4da541d 100644
--- a/src/components/shared/SiteFooter.tsx
+++ b/src/components/shared/SiteFooter.tsx
@@ -29,6 +29,7 @@ export default function SiteFooter() {
       <nav className="flex flex-wrap items-center justify-center gap-x-5 gap-y-1 text-xs">
         <Link href="/about" className="hover:opacity-70 transition-opacity">About</Link>
         <Link href="/contact" className="hover:opacity-70 transition-opacity">Contact</Link>
+        <Link href="/faq" className="hover:opacity-70 transition-opacity">FAQ</Link>
         <Link href="/privacy" className="hover:opacity-70 transition-opacity">Privacy Policy</Link>
         <Link href="/browse" className="hover:opacity-70 transition-opacity">Browse</Link>
         <Link href="/licensor" className="hover:opacity-70 transition-opacity">Upload</Link>

← 21032c0 iwascute: canonicalize homepage for AdSense — redirect dev v  ·  back to IWasCute  ·  iwascute: add sitewide AdSense adsbygoogle.js loader to root 5dd39c2 →