Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
2bfdec8
Astro Odyssey theme documentation by SuperClaude
bajalabs Sep 9, 2025
cabfe77
Add settings.json and update enableThemeSwitcher to false in settings.js
bajalabs Sep 9, 2025
fea97ba
Refactor theme colors and shapes in theme.css for improved consistency
bajalabs Sep 9, 2025
3a1c63b
Refactor landing page structure in index.astro for improved layout an…
bajalabs Sep 9, 2025
975f1cf
chore: add approved plan and tasks for solutions & industries sections
bajalabs Sep 9, 2025
e923cd4
feat: add Solutions & Industries sections with layouts, listings, sam…
bajalabs Sep 9, 2025
0893e7e
refactor: add robust slugify utility and use in Solution layout
bajalabs Sep 9, 2025
757210c
Merge pull request #1 from bajalabs/feature/solutions-industries-section
bajalabs Sep 9, 2025
1769bce
feat: add CLAUDE.md for project guidance and documentation
bajalabs Sep 9, 2025
a3f80e0
docs: add premier upgrade plan and task breakdown (awaiting approval)
bajalabs Sep 9, 2025
294b2b5
chore(phase-0): add theme config, docs skeleton, baseline inventory s…
bajalabs Sep 9, 2025
9024ac5
feat: add Solutions & Industries expansion plan and implementation tasks
bajalabs Sep 9, 2025
f0e037d
feat(pagination+urls): rename item paths to /solution & /industry, ad…
bajalabs Sep 9, 2025
8441da5
refactor(urls): remove pagination for solutions & industries; retain …
bajalabs Sep 9, 2025
b0f7df5
feat: add Automation solution page and development commands documenta…
bajalabs Sep 9, 2025
1dde2cf
feat(blog-pagination): add pagination to blog listing with /blog/page…
bajalabs Sep 9, 2025
9bcebd3
feat(blog-pagination): outline refinements plan for SEO, routing, and…
bajalabs Sep 9, 2025
0d7af69
Merge pull request #2 from bajalabs/seo-upgrade
bajalabs Sep 9, 2025
8466c01
feat: add plans and tasks for Solutions & Industries pagination clean…
bajalabs Sep 9, 2025
7566d62
feat: remove pagination components for Industries and Solutions pages
bajalabs Sep 9, 2025
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
5 changes: 5 additions & 0 deletions .astro/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"_variables": {
"lastUpdateCheck": 1757392445369
}
}
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ yarn-debug.log*
yarn-error.log*
pnpm-debug.log*


# environment variables
.env
.env.production
Expand All @@ -20,4 +19,7 @@ pnpm-debug.log*
.DS_Store

icon.d.ts
*.cache
*.cache

# Crush files
.crush
25 changes: 25 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# AGENTS.md - Odyssey Theme Development Guide

## Commands
- `npm run dev` - Start dev server at localhost:4321
- `npm run build` - Build production site to ./dist/
- `npm run format` - Format code with Prettier (no lint/test commands configured)

## Code Style
- **Prettier**: Tabs, single quotes, semicolons required, arrow functions without parens for single params
- **Naming**: Components (PascalCase), files (kebab-case), CSS classes (BEM: `feature-card__section`)
- **Imports**: Use path aliases (`@components/*`, `@layouts/*`, etc.), barrel exports from `odyssey-theme.js`

## Architecture
- **Framework**: Astro v4.15.9 + TypeScript + MDX
- **Styling**: CSS custom properties in `src/styles/theme.css`
- **Config**: Centralized in `src/config/` (settings, nav, footer)
- **Components**: Functional grouping (core, sections, forms, blog)
- **Layouts**: Base → Page → Post hierarchy

## Key Patterns
- Import Astro components with `.astro` extension
- Use `astro-icon` with `Icon` component for icons
- Theme switching via CSS custom properties
- Mobile-first responsive design
- No testing framework configured
7 changes: 7 additions & 0 deletions BASELINE_CONTENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Baseline Content Inventory

- src/pages/blog/posts: 3 MDX files
- src/pages/solutions/items: 1 MDX files
- src/pages/industries/items: 1 MDX files

Generated: 2025-09-09T08:11:50.946Z
118 changes: 118 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

This is a customized version of the Astro Odyssey Theme, specifically configured for business marketing websites with added Solutions and Industries functionality. The theme has been modified from the original to include:

- Custom dark theme as default (theme switcher disabled)
- Solutions section with dedicated components and pages
- Industries section with dedicated components and pages
- Enhanced component exports in odyssey-theme.js

## Development Commands

```bash
npm run dev # Start development server at localhost:4321
npm run start # Alias for npm run dev
npm run build # Build production site to ./dist/
npm run preview # Preview production build locally
npm run format # Format code with Prettier
```

## Architecture & Key Customizations

### Theme Configuration
- **Default Theme**: Dark theme is now the default (not light)
- **Theme Switcher**: Disabled via `enableThemeSwitcher: false` in settings.js
- **Dark Theme Variables**: `:root` now contains dark theme values by default

### Navigation Structure
The site navigation includes custom business sections:
- Solutions (`/solutions`)
- Industries (`/industries`)
- Standard sections: Home, Blog, About

### Component Architecture

#### New Business Components
- `SolutionsList.astro` & `SolutionCard.astro` - Solutions display components
- `IndustriesList.astro` & `IndustryCard.astro` - Industries display components
- Enhanced form fields: `FormInput.astro`, `FormTextarea.astro`, `FormSelect.astro`

#### Component Export System
- `src/components/odyssey-theme.js` exports all reusable components
- Components are organized by category: sections, blog, solutions, industries, forms
- Use `import { ComponentName } from '@components/odyssey-theme'` pattern

### TypeScript Path Mapping
```typescript
"@config": ["config/*"] // Site configuration
"@components/*": ["components/*"] // All components
"@layouts/*": ["layouts/*"] // Page layouts
"@styles/*": ["styles/*"] // CSS files
"@pages/*": ["pages/*"] // Page components
"@assets/*": ["assets/*"] // Static assets
"@utils/*": ["utils/*"] // Utility functions
"@icons/*": ["icons/*"] // Custom icons
```

### Configuration System
- `src/config/settings.js` - Global site settings (theme switcher disabled)
- `src/config/nav.js` - Main navigation including Solutions/Industries
- `src/config/footer.js` - Footer configuration

### Styling System
- **Default Theme**: Dark theme values in `:root`
- **Theme Variables**: CSS custom properties in `src/styles/theme.css`
- **Shape Radius**: Set to 0 for straight edges in dark theme
- **Color Scheme**: Uses HSL values for precise color control

## Key Implementation Details

### Theme Switching Disabled
The theme switcher component exists but is disabled. The site uses a fixed dark theme configuration.

### Business-Focused Structure
The codebase is structured for B2B marketing sites with:
- Solutions-focused content architecture
- Industry-specific components and pages
- Professional dark theme aesthetic

### Component Usage Pattern
```astro
---
import {
SolutionsList,
IndustriesList,
ThreeColumnTextSection,
CtaCardSection
} from '@components/odyssey-theme';
---

<SolutionsList />
<IndustriesList />
```

### Form Components Enhanced
New form field components provide consistent styling:
- `FormInput` - Text inputs with theme integration
- `FormTextarea` - Multi-line text areas
- `FormSelect` - Dropdown selects

## File Structure Notes

### Recent Customizations
- Homepage (`src/pages/index.astro`) uses business-focused components
- Component exports updated to include Solutions/Industries components
- Navigation configured for business sections
- Dark theme set as default throughout

### Integration Points
- Astro v4.15.9 with Lit components for interactivity
- MDX support for rich content pages
- Icon system using Iconify with Material Design and Outline icons
- Sitemap generation for SEO

The codebase maintains the Odyssey theme's component-driven architecture while adding business-specific functionality and a professional dark theme aesthetic.
20 changes: 20 additions & 0 deletions CRUSH.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Development Commands
- `npm run dev` - Start dev server at localhost:4321
- `npm run build` - Build production site to ./dist/
- `npm run preview` - Preview production build locally
- `npm run format` - Format code with Prettier

# Code Style
- **Formatting**: Tabs, single quotes, semicolons required, arrow functions without parens for single params
- **Components**: PascalCase (e.g., `SolutionsList.astro`)
- **Files**: kebab-case (e.g., `solution-card.astro`)
- **CSS Classes**: BEM notation (e.g., `feature-card__section`)
- **Imports**: Use path aliases from `@components/odyssey-theme` barrel export
- **Paths**: TypeScript aliases (`@config/*`, `@components/*`, `@layouts/*`, etc.)

# Architecture
- **Framework**: Astro v4.15.9 + TypeScript + MDX + Lit components
- **Styling**: CSS custom properties in `src/styles/theme.css`
- **Theme**: Dark theme default, theme switcher disabled
- **Components**: Functional grouping (core, sections, forms, blog, solutions, industries)
- **No lint/test commands configured** - only format and build commands available
100 changes: 100 additions & 0 deletions PLAN_SOLUTIONS_INDUSTRIES_PAGINATION_CLEANUP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# Plan: Solutions & Industries Pagination Artifact Cleanup
Status: Draft (awaiting approval)
Owner: TBD
Last Updated: 2025-09-09

## 1. Objective
Remove legacy / experimental pagination implementation for Solutions (`/solutions/page/[page]`) and Industries (`/industries/page/[page]`) so that:
- Single canonical listing lives at `/solutions` and `/industries` (full list, no paging).
- No duplicate / orphan static pages (e.g., `/solutions/page/1`).
- No accidental future reintroduction via config or copy/paste.
- Optional: Graceful redirects for any external links that may have been shared already.

## 2. Current State (Observed)
| Aspect | Solutions | Industries | Notes |
|--------|-----------|------------|-------|
Dynamic route file present | `src/pages/solutions/page/[page].astro` | `src/pages/industries/page/[page].astro` | Both auto-generate paths via `getStaticPaths` |
Index listing page | `src/pages/solutions/index.astro` | `src/pages/industries/index.astro` | Shows full list (no pagination UI) |
Pagination component usage | Only in dynamic files | Only in dynamic files | Not referenced elsewhere |
Config dependency | `theme.config.js` uses `pagination.pageSize = 10` | Same | Setting shared with Blog pagination |
Generated pages count (likely) | 1 (since only 1–2 MDX items) | 1 | Leads to duplicate content (/page/1) |
Inbound links to /page/* | None in repo (grep results) | None | Orphan pages (crawl depth low) |

## 3. Why This Matters
| Area | Issue | Impact |
|------|-------|--------|
SEO | Duplicate content (`/solutions` vs `/solutions/page/1`) | Diluted signals, crawl waste |
DX | Dead / orphan routes add noise | Harder future maintenance |
Future taxonomy | Will centralize list shaping in unified utilities | Cleaner baseline needed |
Performance | Extra pages built (minor now) | Scales poorly if content grows |

## 4. Decision Matrix
| Option | Description | Pros | Cons | Decision |
|--------|------------|------|------|----------|
Remove files (hard delete) | Delete dynamic route Astro files | Clean & simple | External links to /page/1 404 | Preferred |
Redirect (301) | Keep redirect rule `/solutions/page/* -> /solutions` | Preserves any shared links | Adds config complexity | Optional (add only if risk perceived) |
Soft guard | Keep files but early-return redirect | Minimal file churn | Leaves dead code around | Reject |

## 5. Proposed Actions (High-Level)
1. Delete `src/pages/solutions/page/[page].astro` and `src/pages/industries/page/[page].astro`.
2. Grep for residual references to `/solutions/page` & `/industries/page` (should be none after deletion).
3. (Optional) Add Netlify redirects in `netlify.toml` for any `/solutions/page/:n` & `/industries/page/:n` → canonical listing (301).
4. Update documentation to explicitly state “Solutions & Industries are intentionally unpaginated until volume threshold > X.”
5. Add small regression guard comment inside each index listing file clarifying pagination intentionally omitted.
6. (Optional) Add test (future) verifying absence of generated paths (if a route list utility is introduced later).

## 6. Redirect Strategy (Optional)
Netlify example (only if we believe links may exist):
```
[[redirects]]
from = "/solutions/page/:n"
to = "/solutions"
status = 301
force = false

[[redirects]]
from = "/industries/page/:n"
to = "/industries"
status = 301
force = false
```
Decision to implement: DEFAULT = Skip (can be added later with near-zero cost).

## 7. Risks & Mitigations
| Risk | Likelihood | Impact | Mitigation |
|------|------------|--------|-----------|
External bookmarks to /page/1 break | Low | Low | Add redirects if reported |
Unintended deletion of needed shared helper | Low | Low | Files are isolated; no shared exports |
Future reintroduction without awareness | Medium | Medium | Add comment + doc; codify rule in docs |

## 8. Acceptance Criteria
- Visiting `/solutions/page/1` results in 404 (or redirect if optional redirect chosen).
- Repository contains no `src/pages/solutions/page` or `src/pages/industries/page` directories.
- `grep -R "solutions/page" .` returns only intentional documentation references (at most plan/history docs).
- Index pages render full lists exactly as before (no functional regression).
- Blog pagination unaffected.

## 9. Out of Scope
- Blog pagination refinements (handled in separate plan).
- Future taxonomy or relationship-based filtering.
- Client-side filtering / search.

## 10. Rollback Plan
If removal causes unexpected breakage:
1. Recreate the dynamic files from git history (use previous commit hash reference).
2. Re-run build & redeploy.
3. Investigate dependency wrongly relying on those routes.

## 11. Implementation Order
1. Delete files.
2. Add optional redirects (if approved).
3. Add documentation note + source code inline comment.
4. Commit as `chore(cleanup): remove solutions/industries pagination artifacts`.
5. Open PR to `dark-theme-business` (if working on feature branch) OR commit directly if policy allows.

## 12. Effort Estimate
Engineering: ~15–25 minutes.
Docs + commit review: ~10 minutes.

---
Awaiting approval before executing.
47 changes: 47 additions & 0 deletions TASKS_SOLUTIONS_INDUSTRIES_PAGINATION_CLEANUP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Task Breakdown: Solutions & Industries Pagination Cleanup
Status: Draft (pending approval)
Parent Plan: `PLAN_SOLUTIONS_INDUSTRIES_PAGINATION_CLEANUP.md`

| ID | Task | Details / Commands | Owner | Effort | Depends On | Status |
|----|------|--------------------|-------|--------|------------|--------|
| T1 | Inventory confirmation | `ls src/pages/solutions/page` & `ls src/pages/industries/page` (expect `[page].astro`) | TBD | S | - | Pending |
| T2 | Delete dynamic pagination files | Remove both `[page].astro` files | TBD | S | T1 | Pending |
| T3 | Grep for residual refs | `grep -R "solutions/page" .` & `grep -R "industries/page" .` | TBD | S | T2 | Pending |
| T4 | Add optional redirects (if approved) | Edit `netlify.toml` (2 blocks) | TBD | S | Approval | Deferred* |
| T5 | Add documentation note | Append section to `docs/architecture.md` OR new `docs/content-lists.md` | TBD | M | T2 | Pending |
| T6 | Inline safeguard comments | Add comment in `src/pages/solutions/index.astro` & `src/pages/industries/index.astro` | TBD | XS | T2 | Pending |
| T7 | Commit & PR | Commit message: `chore(cleanup): remove solutions & industries pagination artifacts` | TBD | XS | T3 | Pending |
| T8 | Verify build locally | Run dev build; visit `/solutions`, `/industries`, check 404 on `/solutions/page/1` | TBD | S | T7 | Pending |
| T9 | Optional redirect verification | If T4 done: curl or browser test old URLs | TBD | XS | T4 | Deferred* |
| T10 | Close plan | Mark plan as completed in header | TBD | XS | T8 | Pending |

Legend: Effort — XS (<5m), S (5–10m), M (10–20m), L (20–40m), XL (>40m)
*Deferred tasks only executed if redirect path approved.

## Detailed Notes Per Task
### T2 Deletion
Paths to delete:
- `src/pages/solutions/page/[page].astro`
- `src/pages/industries/page/[page].astro`

### T4 Redirect Block (Optional)
See plan for snippet; ensure no trailing slash mismatch.

### T5 Documentation Guidance
Add rationale: “Unpaginated by design until content volume > threshold (e.g., > 25 items). At that point re-evaluate for performance + SEO list page depth.”

### T6 Inline Comment Example
```astro
<!-- Pagination intentionally omitted: keep full list; see PLAN_SOLUTIONS_INDUSTRIES_PAGINATION_CLEANUP.md -->
```

### T8 Verification Checklist
- No build warnings about missing routes.
- `/blog/page/1` still works (blog unaffected).
- 404 page shows for removed URLs.

### Risk Flags
If future taxonomy introduces slicing logic, ensure it doesn’t implicitly re-add pagination for these sections without explicit stakeholder buy‑in.

---
Awaiting approval.
Loading