From df4bb88f705db74462f5cf591f1d4e481e22c153 Mon Sep 17 00:00:00 2001 From: Jeet Debnath Date: Wed, 8 Apr 2026 11:29:14 +0530 Subject: [PATCH] added new pages --- .agents/skills/seo-audit/SKILL.md | 412 ++++++++++++++++++ .agents/skills/seo-audit/evals/evals.json | 136 ++++++ .../references/ai-writing-detection.md | 200 +++++++++ .claude/skills/seo-audit | 1 + index.html | 60 ++- nginx/default.conf | 2 +- public/sitemap.xml | 12 + skills-lock.json | 5 + src/App.css | 113 +++++ src/App.tsx | 4 + src/pages/AboutPage.tsx | 54 +++ src/pages/PrivacyPage.tsx | 62 +++ 12 files changed, 1040 insertions(+), 21 deletions(-) create mode 100644 .agents/skills/seo-audit/SKILL.md create mode 100644 .agents/skills/seo-audit/evals/evals.json create mode 100644 .agents/skills/seo-audit/references/ai-writing-detection.md create mode 120000 .claude/skills/seo-audit create mode 100644 src/pages/AboutPage.tsx create mode 100644 src/pages/PrivacyPage.tsx diff --git a/.agents/skills/seo-audit/SKILL.md b/.agents/skills/seo-audit/SKILL.md new file mode 100644 index 0000000..3a160d6 --- /dev/null +++ b/.agents/skills/seo-audit/SKILL.md @@ -0,0 +1,412 @@ +--- +name: seo-audit +description: When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions "SEO audit," "technical SEO," "why am I not ranking," "SEO issues," "on-page SEO," "meta tags review," "SEO health check," "my traffic dropped," "lost rankings," "not showing up in Google," "site isn't ranking," "Google update hit me," "page speed," "core web vitals," "crawl errors," or "indexing issues." Use this even if the user just says something vague like "my SEO is bad" or "help with SEO" — start with an audit. For building pages at scale to target keywords, see programmatic-seo. For adding structured data, see schema-markup. For AI search optimization, see ai-seo. +metadata: + version: 1.1.0 +--- + +# SEO Audit + +You are an expert in search engine optimization. Your goal is to identify SEO issues and provide actionable recommendations to improve organic search performance. + +## Initial Assessment + +**Check for product marketing context first:** +If `.agents/product-marketing-context.md` exists (or `.claude/product-marketing-context.md` in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task. + +Before auditing, understand: + +1. **Site Context** + - What type of site? (SaaS, e-commerce, blog, etc.) + - What's the primary business goal for SEO? + - What keywords/topics are priorities? + +2. **Current State** + - Any known issues or concerns? + - Current organic traffic level? + - Recent changes or migrations? + +3. **Scope** + - Full site audit or specific pages? + - Technical + on-page, or one focus area? + - Access to Search Console / analytics? + +--- + +## Audit Framework + +### Schema Markup Detection Limitation + +**`web_fetch` and `curl` cannot reliably detect structured data / schema markup.** + +Many CMS plugins (AIOSEO, Yoast, RankMath) inject JSON-LD via client-side JavaScript — it won't appear in static HTML or `web_fetch` output (which strips ` @@ -79,6 +95,10 @@

How it works

Sign in with Google, write a few things you're grateful for each day, and watch your mindset shift over time. Your entries are encrypted before they leave your device.

Get started — it's free

+

+ About · + Privacy Policy +

diff --git a/nginx/default.conf b/nginx/default.conf index e88ce53..70f6bcc 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -28,7 +28,7 @@ server { try_files /index.html =404; } - location ~ ^/(write|history|settings)(/|$) { + location ~ ^/(write|history|settings|privacy|about)(/|$) { try_files /index.html =404; } diff --git a/public/sitemap.xml b/public/sitemap.xml index 41c5e8a..967078d 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -6,4 +6,16 @@ monthly 1.0 + + https://gratefuljournal.online/about + 2026-04-08 + monthly + 0.7 + + + https://gratefuljournal.online/privacy + 2026-04-08 + yearly + 0.4 + diff --git a/skills-lock.json b/skills-lock.json index ebf08d6..afe0e41 100644 --- a/skills-lock.json +++ b/skills-lock.json @@ -5,6 +5,11 @@ "source": "addyosmani/web-quality-skills", "sourceType": "github", "computedHash": "f1fed683b76913d26fbf1aa1e008e6932f7771701fc3a79925b042236aa4681a" + }, + "seo-audit": { + "source": "coreyhaines31/marketingskills", + "sourceType": "github", + "computedHash": "1eef04180a5278a6869fab117c75fa2acf512bfda0a4b16569409b88b7bcb343" } } } diff --git a/src/App.css b/src/App.css index f8a55c2..2e4eb19 100644 --- a/src/App.css +++ b/src/App.css @@ -2982,3 +2982,116 @@ box-shadow: none !important; border: none !important; } + +/* ============================ + STATIC PAGES (Privacy, About) + ============================ */ +.static-page { + min-height: 100dvh; + background: linear-gradient(160deg, #eef6ee 0%, #dcfce7 100%); + display: flex; + flex-direction: column; + overflow-y: auto; +} + +.static-page__header { + padding: 1.25rem 2rem; + border-bottom: 1px solid rgba(34, 197, 94, 0.2); + background: rgba(255, 255, 255, 0.6); + backdrop-filter: blur(8px); + position: sticky; + top: 0; + z-index: 10; +} + +.static-page__logo { + font-family: "Sniglet", system-ui; + font-size: 1.125rem; + font-weight: 700; + color: #16a34a; + text-decoration: none; +} + +.static-page__content { + flex: 1; + max-width: 680px; + width: 100%; + margin: 0 auto; + padding: 3rem 1.5rem 4rem; + color: #1a2e1a; +} + +.static-page__content h1 { + font-family: "Sniglet", system-ui; + font-size: 2rem; + font-weight: 700; + color: #16a34a; + margin: 0 0 0.5rem; + line-height: 1.2; +} + +.static-page__content h2 { + font-size: 1.125rem; + font-weight: 600; + color: #15803d; + margin: 2rem 0 0.75rem; +} + +.static-page__content p { + line-height: 1.7; + margin: 0 0 1rem; + color: #374151; +} + +.static-page__content ul { + padding-left: 1.25rem; + margin: 0 0 1rem; + color: #374151; +} + +.static-page__content li { + line-height: 1.7; + margin-bottom: 0.4rem; +} + +.static-page__content a { + color: #16a34a; + text-decoration: underline; + text-underline-offset: 3px; +} + +.static-page__updated { + font-size: 0.875rem; + color: #6b7280; + margin-bottom: 1.75rem !important; +} + +.static-page__tagline { + font-size: 1.0625rem; + color: #22c55e; + font-weight: 500; + margin-bottom: 1.75rem !important; +} + +.static-page__footer { + padding: 1.5rem 2rem; + border-top: 1px solid rgba(34, 197, 94, 0.2); + background: rgba(255, 255, 255, 0.4); + display: flex; + gap: 1rem; + align-items: center; + font-size: 0.875rem; +} + +.static-page__footer a { + color: #16a34a; + text-decoration: none; +} + +.static-page__footer a:hover { + text-decoration: underline; +} + +.static-page__footer span { + color: #9ca3af; +} diff --git a/src/App.tsx b/src/App.tsx index 4e1a59e..2120b4e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,6 +5,8 @@ import HomePage from './pages/HomePage' import HistoryPage from './pages/HistoryPage' import SettingsPage from './pages/SettingsPage' import LoginPage from './pages/LoginPage' +import PrivacyPage from './pages/PrivacyPage' +import AboutPage from './pages/AboutPage' import './App.css' function App() { @@ -37,6 +39,8 @@ function App() { } /> + } /> + } /> } /> diff --git a/src/pages/AboutPage.tsx b/src/pages/AboutPage.tsx new file mode 100644 index 0000000..cbe4de3 --- /dev/null +++ b/src/pages/AboutPage.tsx @@ -0,0 +1,54 @@ +import { Link } from 'react-router-dom' + +export default function AboutPage() { + return ( +
+
+ 🌱 Grateful Journal +
+ +
+

About Grateful Journal

+

+ A private space for gratitude and reflection. No feeds. No noise. Just you and your thoughts. +

+ +

What is it?

+

+ Grateful Journal is a free, end-to-end encrypted daily journal focused on gratitude. + You write a few things you're grateful for each day, and over time you build a private + record of the good in your life — visible only to you. +

+ +

Features

+
    +
  • End-to-end encrypted — your entries are encrypted before leaving your device. We cannot read them.
  • +
  • No ads, no tracking — we don't sell your data or show you ads.
  • +
  • Works offline — installable as a PWA on Android, iOS, and desktop.
  • +
  • Daily prompts — gentle nudges to keep your practice consistent.
  • +
  • History view — browse past entries and reflect on how far you've come.
  • +
  • Free to use — no subscription, no paywall.
  • +
+ +

Why gratitude?

+

+ Research consistently shows that a regular gratitude practice improves mood, reduces stress, + and builds resilience. Grateful Journal gives you the simplest possible tool to build that habit — + without distractions or social pressure. +

+ +

Privacy first

+

+ We built Grateful Journal because we believe your inner thoughts deserve a private space. + Read our full Privacy Policy to understand exactly how your data is protected. +

+
+ +
+ ← Back to Grateful Journal + · + Privacy Policy +
+
+ ) +} diff --git a/src/pages/PrivacyPage.tsx b/src/pages/PrivacyPage.tsx new file mode 100644 index 0000000..4b6e21c --- /dev/null +++ b/src/pages/PrivacyPage.tsx @@ -0,0 +1,62 @@ +import { Link } from 'react-router-dom' + +export default function PrivacyPage() { + return ( +
+
+ 🌱 Grateful Journal +
+ +
+

Privacy Policy

+

Last updated: April 8, 2026

+ +

+ Grateful Journal is built on a simple promise: your journal entries are yours alone. + We designed the app so that we cannot read your entries even if we wanted to. +

+ +

What we collect

+
    +
  • Account info — your name and email address via Google Sign-In, used solely to identify your account.
  • +
  • Journal entries — stored encrypted in our database. We do not have access to the content of your entries.
  • +
  • Usage data — no analytics, no tracking pixels, no third-party advertising SDKs.
  • +
+ +

Encryption

+

+ Your journal entries are end-to-end encrypted. They are encrypted on your device before being sent to our servers. + We store only the encrypted ciphertext — decryption happens locally in your browser using your account key. +

+ +

Data sharing

+

+ We do not sell, share, or rent your personal data to any third party. + We use Firebase (Google) for authentication only. +

+ +

Data deletion

+

+ You can delete your account and all associated data at any time from the Settings page. + Deletion is permanent and irreversible. +

+ +

Cookies

+

+ We use a single session cookie to keep you signed in. No advertising or tracking cookies are used. +

+ +

Contact

+

+ Questions about this policy? Reach us at the contact details on our About page. +

+
+ + +
+ ) +}