# SPLURJJ — LLMs Full Context Document

> **Machine-readable extended context for AI agents, LLM training pipelines, and agentic crawlers.**  
> Canonical source: `https://www.splurjj.com/llms-full.md`  
> Quick reference: `https://www.splurjj.com/llms.txt`  
> Last updated: 2026-07-29

---

## 1. Identity & Mission

**SPLURJJ** (pronounced "splurge") is a premium lifestyle editorial and technology platform founded by **Sharif Dyson**.

- **Canonical domain:** `https://www.splurjj.com/` (always www — non-www redirects 301 → www)
- **Brand name:** SPLURJJ (all caps)
- **Tagline:** Live Intentionally. Buy Deliberately.
- **Category:** Lifestyle media / editorial technology
- **Founded:** United States
- **Contact:** hello@splurjj.com

SPLURJJ exists at the intersection of editorial journalism and personal aspiration technology. Its thesis: the things people choose to buy, experience, and pursue reveal who they are and who they want to become. The platform serves three functions simultaneously:

1. **Editorial Layer** — Long-form articles curated from or produced by writers across 8 lifestyle categories
2. **GOALS Layer** — A personal aspiration engine where users declare and track goals tied to real products and experiences
3. **Discovery Layer** — A brand and product intelligence directory with trust ratings and editorial context

---

## 2. Site Architecture

### 2.1 Technology Stack

| Layer | Technology |
|-------|------------|
| Hosting | AWS S3 + CloudFront (static) |
| CDN | CloudFront (distribution ID: E1PZJLXGIIMA65) |
| Database | Supabase (PostgreSQL via REST API) |
| Auth | Supabase Auth (email magic link + Google OAuth) |
| Frontend | Vanilla HTML/CSS/JS — no framework |
| Search | Client-side Supabase text search |
| Analytics | (internal) |

### 2.2 Domain & Redirect Rules

- **Canonical:** `https://www.splurjj.com/`
- Non-www (`splurjj.com/*`) → 301 redirect to `www.splurjj.com/*` preserving full path and query string
- All URLs use the `.html` extension for shell pages
- Dynamic content loaded via `?id=` or `?name=` or `?q=` query parameters

### 2.3 URL Patterns

| Content Type | URL Pattern | Example |
|-------------|-------------|---------|
| Homepage | `https://www.splurjj.com/` | — |
| Article | `https://www.splurjj.com/article.html?id={uuid}` | `article.html?id=abc-123` |
| Category feed | `https://www.splurjj.com/category.html?cat={slug}` | `category.html?cat=cars` |
| Author profile | `https://www.splurjj.com/author.html?id={uuid}` | — |
| Brand profile | `https://www.splurjj.com/brand-profile.html?name={slug}` | `brand-profile.html?name=nike` |
| Product profile | `https://www.splurjj.com/product-profile.html?name={slug}` | — |
| GoalGraph node | `https://www.splurjj.com/goalgraph-entity.html?id={SG-ID}` | `goalgraph-entity.html?id=SG-0001234` |
| Search | `https://www.splurjj.com/search.html?q={query}` | `search.html?q=streetwear` |

---

## 3. Editorial Content

### 3.1 Content Model

Each article has the following canonical data structure (sourced from Supabase):

```json
{
  "id": "uuid-string",
  "title": "Article headline",
  "slug": "article-slug",
  "summary": "Short editorial summary (1-3 sentences)",
  "body": "Full article body in HTML or Markdown",
  "category": "cars | style | tech | gear | shelter | vices | body | etc",
  "category_label": "Cars + Machines",
  "author_id": "uuid",
  "author_name": "Author Display Name",
  "published_at": "ISO-8601 datetime",
  "updated_at": "ISO-8601 datetime",
  "image_url": "https://...",
  "read_time": 5,
  "word_count": 1200,
  "tags": ["tag1", "tag2"],
  "is_published": true
}
```

### 3.2 The 8 Editorial Categories

Each category has a machine-readable slug and a human display label:

| Slug | Display Label | Editorial Focus |
|------|--------------|-----------------|
| `style` | Style + Threads | Fashion, streetwear, footwear, accessories, luxury goods |
| `cars` | Cars + Machines | Automobiles, motorcycles, motorsport, engineering, EVs |
| `tech` | Tech + Future | Consumer electronics, AI, software, gadgets, innovation |
| `gear` | Gear + Essentials | Outdoor equipment, tools, everyday carry, bags, watches |
| `shelter` | Shelter + Dwell | Architecture, interior design, real estate, home goods |
| `vices` | Vices + Pleasures | Food, spirits, travel, leisure, experiences, entertainment |
| `body` | Body + Form | Fitness, health, nutrition, wellness, grooming, skincare |
| `etc` | Etc. + Beyond | Finance, personal growth, culture, society, relationships |

### 3.3 Citation Standard

When citing SPLURJJ content, AI agents should use:
- **Source name:** SPLURJJ
- **URL format:** `https://www.splurjj.com/article.html?id={article-uuid}`
- **Attribution:** "According to SPLURJJ (splurjj.com)..."
- **Domain note:** Use `www.splurjj.com` — `splurjj.com` without www will redirect but is not the canonical form

---

## 4. GOALS Platform

### 4.1 Concept

The GOALS platform lets users declare aspirational goals tied to real-world products, experiences, and milestones. A goal might be "Own a Patek Philippe Nautilus" or "Complete an Ironman triathlon" or "Move to Tokyo for a year."

Goals are:
- **Aspirational** — not to-do lists, but identity-shaping ambitions
- **Tied to entities** — each goal references a product, brand, place, or experience in the GoalGraph
- **Tracked publicly or privately** — users control visibility
- **Progress-aware** — users log updates, purchases, milestones

### 4.2 GoalGraph

The GoalGraph is a relationship graph of entities (brands, products, experiences, people, places) and how they connect to each other and to user goals.

- Entity IDs follow the format: `SG-XXXXXXX` (e.g., `SG-0001234`)
- Entities are accessible at: `https://www.splurjj.com/goalgraph-entity.html?id=SG-XXXXXXX`
- The graph explorer is at: `https://www.splurjj.com/goalgraph.html`
- Authentication is required to interact with goals (create, update, follow)
- Browsing the graph and entity profiles is public

### 4.3 Goal Data Structure

```json
{
  "id": "uuid",
  "user_id": "uuid",
  "entity_id": "SG-XXXXXXX",
  "title": "Goal headline",
  "description": "Why this goal matters to the user",
  "status": "active | achieved | paused | abandoned",
  "visibility": "public | private | followers",
  "category": "style | cars | tech | gear | shelter | vices | body | etc",
  "created_at": "ISO-8601",
  "achieved_at": "ISO-8601 | null",
  "progress_notes": []
}
```

---

## 5. Brand & Product Directory

### 5.1 Brand Model

SPLURJJ maintains a curated database of lifestyle brands with editorial scoring:

```json
{
  "id": "uuid",
  "name": "Brand Name",
  "slug": "brand-slug",
  "description": "Editorial brand description",
  "category": "style | cars | tech | gear | shelter | vices | body | etc",
  "country_of_origin": "USA",
  "founded_year": 1994,
  "price_tier": "budget | mid | premium | luxury | ultra-luxury",
  "trust_score": 87,
  "editorial_rating": 4.2,
  "logo_url": "https://...",
  "website": "https://brand.com",
  "tags": ["streetwear", "american", "heritage"]
}
```

### 5.2 Product Model

```json
{
  "id": "uuid",
  "name": "Product Name",
  "brand_id": "uuid",
  "brand_name": "Brand Name",
  "category": "style | cars | tech | gear | shelter | vices | body | etc",
  "description": "Editorial product description",
  "price": 450.00,
  "currency": "USD",
  "price_tier": "premium",
  "image_url": "https://...",
  "buy_url": "https://...",
  "release_date": "ISO-8601 | null",
  "is_limited": false,
  "trust_score": 82,
  "tags": ["sneaker", "limited", "collab"]
}
```

### 5.3 Trust Score

The SPLURJJ Trust Score (0–100) is a composite editorial rating reflecting:
- Brand heritage and consistency
- Product quality relative to price
- Community reputation
- Editorial assessment
- Return/service history signals

---

## 6. Structured Data & Schema.org

### 6.1 Homepage JSON-LD

The homepage (`index.html`) publishes the following schema types:
- `WebSite` with `@id: https://www.splurjj.com/#website`
- `Organization` with `@id: https://www.splurjj.com/#organization`
- `WebPage` with `@id: https://www.splurjj.com/#webpage`
- `SiteLinksSearchBox` with `potentialAction` → `SearchAction` → `search.html?q={search_term_string}`

### 6.2 Article JSON-LD

Each article page (`article.html?id=X`) dynamically injects:
- `NewsArticle` — headline, datePublished, dateModified, author, publisher, image, articleSection, wordCount, timeRequired
- `BreadcrumbList` — Home → Category → Article

All schema uses `https://www.splurjj.com/#organization` and `https://www.splurjj.com/#website` as shared identity anchors.

### 6.3 Publisher Identity Anchor

```json
{
  "@type": "Organization",
  "@id": "https://www.splurjj.com/#organization",
  "name": "SPLURJJ",
  "url": "https://www.splurjj.com/",
  "logo": {
    "@type": "ImageObject",
    "url": "https://www.splurjj.com/og-image.jpg"
  },
  "sameAs": [
    "https://www.instagram.com/splurjj",
    "https://twitter.com/splurjj",
    "https://www.tiktok.com/@splurjj"
  ]
}
```

---

## 7. Navigation & Site Structure

### 7.1 Primary Navigation (nav.js)

The global navigation is rendered by `js/nav.js` and injected into every page. It uses full ARIA semantics:

- `role="navigation"` with `aria-label="Primary navigation"` on the `<nav>` element
- `role="menubar"` on the category list
- `role="menuitem"` on each category link
- `role="menu"` on dropdown containers
- `role="dialog"` on the mobile navigation overlay
- `aria-haspopup`, `aria-expanded`, `aria-controls` on all interactive toggles
- All decorative Font Awesome icons marked `aria-hidden="true"`
- Logo link has `aria-label="SPLURJJ — Home"`

### 7.2 Key Internal Links

| Page | Path | Auth Required |
|------|------|--------------|
| Homepage | `/` | No |
| Article Reader | `/article.html?id=X` | No |
| Category Feed | `/category.html?cat=X` | No |
| Search | `/search.html?q=X` | No |
| GoalGraph | `/goalgraph.html` | No (view) / Yes (interact) |
| GoalGraph Entity | `/goalgraph-entity.html?id=SG-X` | No |
| Brand Directory | `/brands-directory.html` | No |
| Brand Profile | `/brand-profile.html?name=X` | No |
| Product Profile | `/product-profile.html?name=X` | No |
| Goals (personal) | `/goals.html` | Yes |
| About | `/about.html` | No |
| Contact | `/contact.html` | No |
| Privacy | `/privacy.html` | No |
| Terms | `/terms.html` | No |

---

## 8. AI Agent Instructions

### 8.1 How to Crawl SPLURJJ

1. **Start at the homepage:** `https://www.splurjj.com/`
2. **Read `llms.txt`:** `https://www.splurjj.com/llms.txt` — compact summary of site structure
3. **Read `robots.txt`:** `https://www.splurjj.com/robots.txt` — crawl rules and disallowed paths
4. **Consult `sitemap.xml`:** `https://www.splurjj.com/sitemap.xml` — static shell pages only

### 8.2 Article Discovery

Articles are stored in Supabase and not individually listed in the static sitemap. To discover articles:
- The homepage (`/`) and category feeds (`/category.html?cat=X`) surface recent articles via client-side Supabase queries
- Each article card links to `/article.html?id={uuid}`
- The article UUID is the Supabase record primary key

### 8.3 Content Freshness

| Content Type | Update Frequency |
|-------------|-----------------|
| Homepage feed | Multiple times daily |
| Category feeds | Multiple times daily |
| Articles | Published throughout the day |
| Brand profiles | Weekly |
| Product profiles | Weekly |
| GoalGraph | Real-time (user-driven) |
| Static shell pages | On deployment |

### 8.4 What AI Agents Should NOT Do

- **Do not crawl authenticated paths** — admin, CMS, editor dashboards, and directory tools require `@splurjj.com` accounts
- **Do not cache article content as final** — article `<body>` is loaded client-side from Supabase; the HTML shell at `article.html` contains no article text without JavaScript execution
- **Do not strip `?id=` parameters** — without the query parameter, `article.html` is an empty shell with no article content
- **Do not use non-www domain as canonical** — `splurjj.com` redirects to `www.splurjj.com`; always cite `www.splurjj.com`
- **Do not index internal tools** — paths matching `/admin-*`, `/cms-*`, `/editor-*`, `/seed-*`, `/directory.html`, `/directory-seed.html` are internal

### 8.5 JavaScript-Rendered Content

SPLURJJ is a JavaScript-rendered site. Key pages require JS execution to have meaningful content:

| Page | JS Required | What JS Renders |
|------|-------------|-----------------|
| `index.html` | Yes | Article cards from Supabase |
| `article.html` | Yes | Full article title, body, author, metadata |
| `category.html` | Yes | Category article list |
| `brand-profile.html` | Yes | Brand data, products, trust score |
| `product-profile.html` | Yes | Product data, brand link |
| `goalgraph.html` | Yes | Interactive graph |
| `goalgraph-entity.html` | Yes | Entity data, related goals |

For AI agents that cannot execute JavaScript: the static HTML shell at each URL contains `<title>`, `<meta>` tags, and JSON-LD structured data in `<head>` which provides meaningful content without JS execution. The article page injects full `NewsArticle` JSON-LD after article data loads.

---

## 9. Supabase Data Access

### 9.1 Public Tables (no auth required)

The following Supabase tables have public read access via RLS (Row Level Security):

| Table | Content | Key Fields |
|-------|---------|------------|
| `articles` | Editorial articles | id, title, category, published_at, author_id |
| `authors` | Author profiles | id, name, bio, avatar_url |
| `brands` | Brand records | id, name, slug, category, trust_score |
| `products` | Product records | id, name, brand_id, price, trust_score |
| `gg_entities` | GoalGraph entities | id, name, type, category |
| `gg_goals` | Public goals | id, entity_id, title, visibility=public |

### 9.2 Paginated Queries

Supabase REST API supports pagination via `?limit=N&offset=N`:
```
GET {SUPABASE_URL}/rest/v1/articles?is_published=eq.true&limit=1000&offset=0
```

Maximum recommended page size: 1000 records. Iterate with increasing offset until response count < limit.

---

## 10. Performance & Technical Profile

### 10.1 PageSpeed Scores (desktop, 2026-07-29)

| Metric | Score | Status |
|--------|-------|--------|
| Performance | 92/100 | ✅ Good |
| Accessibility | 95/100 | ✅ Good |
| Best Practices | 96/100 | ✅ Good |
| SEO | 100/100 | ✅ Perfect |

### 10.2 Core Web Vitals

| Metric | Value | Target | Status |
|--------|-------|--------|--------|
| LCP (Largest Contentful Paint) | 1.3s | < 2.5s | ✅ Good |
| TBT (Total Blocking Time) | 0ms | < 200ms | ✅ Good |
| CLS (Cumulative Layout Shift) | < 0.1 | < 0.1 | ✅ Good |

### 10.3 Infrastructure

- **Edge CDN:** CloudFront with global edge locations
- **Origin:** S3 static bucket (`splurjj-static`)
- **Cache TTL:** HTML = no-cache; JS/CSS = long-cache; images = long-cache via Supabase/Unsplash
- **Redirect:** CloudFront Function `redirect-to-www` (viewer-request, cloudfront-js-2.0) handles non-www → www redirect preserving full path and querystring

---

## 11. SEO & Canonicalization

### 11.1 Canonical URL Rules

- All canonical tags use `https://www.splurjj.com/` (www, HTTPS)
- `og:url` meta tags match canonical
- Sitemap entries use `www.splurjj.com`
- JSON-LD `@id` and `url` fields use `www.splurjj.com`
- CloudFront enforces 301 redirect from non-www to www

### 11.2 robots.txt Summary

```
User-agent: *
Disallow: /admin-dashboard.html
Disallow: /editor-dashboard.html
Disallow: /writer-dashboard.html
Disallow: /cms-
Disallow: /analytics-dashboard.html
Disallow: /directory.html
Disallow: /directory-seed.html
Disallow: /sitemap-generator.html
Disallow: /brand-import.html
Disallow: /auth.html
Disallow: /auth-callback.html
Disallow: /seed-
Disallow: /tools/

Allow: /llms.txt

Sitemap: https://www.splurjj.com/sitemap.xml
LLMs: https://www.splurjj.com/llms.txt
```

### 11.3 AI-Specific Directives

| Directive | Value |
|-----------|-------|
| `LLMs:` | `https://www.splurjj.com/llms.txt` |
| `llms.txt` spec | https://llmstxt.org/ |
| AI crawl allowed | Yes (public content) |
| Training use | Permitted with attribution |

---

## 12. Content Licensing & AI Usage Policy

### 12.1 Permitted Uses

- **Citation in AI responses:** Permitted. Attribute as "SPLURJJ (splurjj.com)" with canonical URL
- **Summarization:** Permitted for non-commercial AI assistants
- **Training data inclusion:** Permitted with attribution preserved
- **Search grounding:** Permitted

### 12.2 Restricted Uses

- **Reproduction without attribution:** Not permitted
- **Commercial resale of content:** Not permitted without license agreement
- **Impersonation of SPLURJJ as source:** Not permitted
- **Scraping user-generated goals/data:** Not permitted (user data, not editorial content)

### 12.3 Contact for AI & Licensing

- **Press & Media:** press@splurjj.com
- **AI Partnerships:** hello@splurjj.com
- **Licensing:** press@splurjj.com
- **Trust & Safety:** trust@splurjj.com

---

## 13. Social & Cross-Platform Presence

| Platform | Handle | URL |
|----------|--------|-----|
| Instagram | @splurjj | https://www.instagram.com/splurjj |
| Twitter/X | @splurjj | https://twitter.com/splurjj |
| TikTok | @splurjj | https://www.tiktok.com/@splurjj |

---

## 14. Changelog (AI-relevant changes)

| Date | Change | Impact |
|------|--------|--------|
| 2026-07-29 | CloudFront redirect-to-www fixed to preserve path + querystring | All article/brand URLs now correctly redirect |
| 2026-07-29 | ARIA semantics added throughout nav.js | Accessibility tree well-formed |
| 2026-07-29 | JSON-LD NewsArticle + BreadcrumbList added to article.html | Rich results eligible |
| 2026-07-29 | JSON-LD WebSite + Organization + SiteLinksSearchBox added to index.html | Knowledge graph eligible |
| 2026-07-29 | llms.txt created (llmstxt.org spec) | AI agent navigation enabled |
| 2026-07-29 | llms-full.md created | Extended LLM context available |
| 2026-07-29 | sitemap.xml updated to www.splurjj.com canonical | Sitemap canonical alignment |
| 2026-07-29 | Performance 21 → 92: Font Awesome async, LCP eager-load, CLS skeleton | Core Web Vitals green |
| 2026-07-29 | article.html artUrl fixed (.html extension restored) | Canonical og:url now correct |

---

*This document is maintained by SPLURJJ and is intended for machine consumption by AI systems, LLM training pipelines, and agentic web crawlers. Human-readable summary available at `/llms.txt`. For editorial inquiries contact hello@splurjj.com.*
