docs: Add comprehensive project summary
This commit is contained in:
parent
f950357096
commit
db191beaec
1 changed files with 231 additions and 0 deletions
231
PROJECT_SUMMARY.md
Normal file
231
PROJECT_SUMMARY.md
Normal file
|
|
@ -0,0 +1,231 @@
|
|||
# IF.docs.md2html - Project Summary
|
||||
|
||||
## What We Built
|
||||
|
||||
A **magazine-style Markdown viewer** that transforms plain `.md` files into beautiful, animated documents using the **ICW NextSpread design system** from icantwait.ca property showcase.
|
||||
|
||||
## Key Features
|
||||
|
||||
### 🎨 Design System (Ported from ICW)
|
||||
- **Typography**: Inter headings, system fonts for body, JetBrains Mono for code
|
||||
- **Colors**: Neutral palette (50-900), Primary green (#10B981)
|
||||
- **Spacing**: 8-point grid system, generous white space
|
||||
- **Animations**: Webflow-style ease curves `[0.25, 0.46, 0.45, 0.94]`
|
||||
|
||||
### ✨ Animations (ICW Property Page Patterns)
|
||||
- **Adaptive Duration**: Animation speed adjusts to scroll velocity
|
||||
- Fast scroll = shorter animations (0.5x speed)
|
||||
- Slow scroll = longer animations (1.5x speed)
|
||||
- **Staggered Reveals**: Gallery-style cascade with 50ms delays
|
||||
- **Scroll Triggers**: IntersectionObserver with -10% margin
|
||||
- **Reduced Motion**: Respects accessibility preferences
|
||||
|
||||
### 📱 Layout
|
||||
- **Magazine Grid**: 2-column main content + 1-column sidebar (desktop)
|
||||
- **Full-Bleed Hero**: 40vh mobile, 50vh desktop with gradient overlay
|
||||
- **Sticky Sidebar**: Navigation panel follows scroll
|
||||
- **Responsive**: Mobile-first (320px) → Desktop (1440px+)
|
||||
|
||||
### 🚀 Functionality
|
||||
- **Drag-and-Drop Upload**: `.md` and `.markdown` files
|
||||
- **URL Parsing**: `?parse=https://url/file.md` query parameter
|
||||
- **Syntax Highlighting**: VS Code Dark+ theme via highlight.js
|
||||
- **Static Export**: Pre-rendered HTML for fast loading
|
||||
|
||||
## Components
|
||||
|
||||
### HeroSection (`src/components/HeroSection.tsx`)
|
||||
- Full-bleed hero with gradient overlay
|
||||
- Animated badge, title, CTA buttons
|
||||
- ICW-style drop shadows and backdrop blur
|
||||
|
||||
### MagazineContent (`src/components/MagazineContent.tsx`)
|
||||
- 2-column grid layout
|
||||
- Staggered element reveals via IntersectionObserver
|
||||
- Sticky sidebar with navigation
|
||||
|
||||
### MarkdownViewer (`src/components/MarkdownViewer.tsx`)
|
||||
- Main wrapper component
|
||||
- Orchestrates hero + content sections
|
||||
- Adaptive animation timing
|
||||
|
||||
### FileUploader (`src/components/FileUploader.tsx`)
|
||||
- Drag-and-drop zone with hover states
|
||||
- File input fallback
|
||||
- Loading spinner and error states
|
||||
|
||||
## Animation Hooks
|
||||
|
||||
### useAdaptiveDuration (`src/lib/useAdaptiveDuration.ts`)
|
||||
```typescript
|
||||
// Adjusts animation speed based on scroll velocity
|
||||
const duration = useAdaptiveDuration(0.6); // Base 0.6s
|
||||
// Returns: 0.3s (fast scroll) → 0.9s (slow scroll)
|
||||
```
|
||||
|
||||
### useScrollSpeed (`src/lib/useScrollSpeed.ts`)
|
||||
```typescript
|
||||
// Measures scroll velocity (0-100 scale)
|
||||
const scrollSpeed = useScrollSpeed();
|
||||
// 0 = stationary, 100 = max speed (5000px/s)
|
||||
```
|
||||
|
||||
### useClientReady (`src/lib/useClientReady.ts`)
|
||||
```typescript
|
||||
// Prevents hydration mismatches
|
||||
const isReady = useClientReady();
|
||||
if (!isReady) return <Skeleton />;
|
||||
```
|
||||
|
||||
## Styling
|
||||
|
||||
### Markdown Prose (`src/styles/markdown.css`)
|
||||
- **Headings**: -0.02em letter spacing, tracking-tight
|
||||
- **Drop Cap**: First paragraph first letter (6xl, float left)
|
||||
- **Lead Paragraph**: First paragraph 2xl size
|
||||
- **Links**: Underline on hover with smooth transition
|
||||
- **Blockquotes**: Magazine pull-quote style with left border
|
||||
- **Code Blocks**: Rounded corners, VS Code theme
|
||||
- **Images**: Full-width with rounded corners and shadows
|
||||
|
||||
### Syntax Highlighting (`src/styles/highlight.css`)
|
||||
- VS Code Dark+ theme colors
|
||||
- Background: `#1e1e1e`
|
||||
- Keywords: `#569cd6` (blue)
|
||||
- Strings: `#ce9178` (orange)
|
||||
- Comments: `#6a9955` (green)
|
||||
|
||||
## Deployment Configuration
|
||||
|
||||
### Next.js Config (`next.config.mjs`)
|
||||
```javascript
|
||||
{
|
||||
output: 'export', // Static export
|
||||
basePath: '/infrafabric/IF.docs.md2html', // StackCP path
|
||||
images: { unoptimized: true } // No image optimization
|
||||
}
|
||||
```
|
||||
|
||||
### Apache Config (`.htaccess`)
|
||||
- SPA routing (all requests → index.html)
|
||||
- CORS headers for external markdown fetching
|
||||
- Gzip compression for text files
|
||||
- Browser caching (1 hour HTML, 1 month CSS/JS)
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Local Development
|
||||
```bash
|
||||
npm install
|
||||
npm run dev
|
||||
# Open http://localhost:3000
|
||||
```
|
||||
|
||||
### File Upload
|
||||
1. Drag `.md` file onto dropzone
|
||||
2. Or click "Choose File" button
|
||||
3. Document renders with magazine layout + animations
|
||||
|
||||
### URL Parsing
|
||||
```
|
||||
http://localhost:3000?parse=https://raw.githubusercontent.com/user/repo/main/README.md
|
||||
```
|
||||
|
||||
### Production (StackCP)
|
||||
```
|
||||
https://digital-lab.ca/infrafabric/IF.docs.md2html
|
||||
https://digital-lab.ca/infrafabric/IF.docs.md2html?parse=https://example.com/docs.md
|
||||
```
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
IF.docs.md2html/
|
||||
├── src/
|
||||
│ ├── app/
|
||||
│ │ ├── layout.tsx # Root layout
|
||||
│ │ └── page.tsx # Home page (Suspense wrapper)
|
||||
│ ├── components/
|
||||
│ │ ├── FileUploader.tsx # Drag-and-drop UI
|
||||
│ │ ├── HeroSection.tsx # ICW-style hero
|
||||
│ │ ├── MagazineContent.tsx # Magazine layout
|
||||
│ │ ├── MarkdownViewer.tsx # Main viewer
|
||||
│ │ └── ViewerContent.tsx # URL param handler
|
||||
│ ├── lib/
|
||||
│ │ ├── markdown-parser.ts # markdown-it config
|
||||
│ │ ├── useAdaptiveDuration.ts # Animation hook
|
||||
│ │ ├── useScrollSpeed.ts # Scroll tracker
|
||||
│ │ └── useClientReady.ts # Hydration guard
|
||||
│ └── styles/
|
||||
│ ├── globals.css # Base + Tailwind
|
||||
│ ├── markdown.css # Prose styling
|
||||
│ └── highlight.css # Code theme
|
||||
├── out/ # Build output
|
||||
├── .htaccess # Apache config
|
||||
├── DEPLOY.md # Deployment guide
|
||||
├── README.md # User documentation
|
||||
└── PROJECT_SUMMARY.md # This file
|
||||
```
|
||||
|
||||
## Technical Highlights
|
||||
|
||||
### Performance
|
||||
- **Static Export**: Pre-rendered HTML, no server required
|
||||
- **Code Splitting**: Automatic via Next.js
|
||||
- **Lazy Loading**: Images below fold
|
||||
- **Gzip Compression**: ~70% size reduction
|
||||
- **First Load**: 477 kB (main page)
|
||||
|
||||
### Accessibility
|
||||
- **Reduced Motion**: Respects `prefers-reduced-motion`
|
||||
- **Keyboard Navigation**: Tab order, focus indicators
|
||||
- **Semantic HTML**: Proper heading hierarchy
|
||||
- **Touch Targets**: 44px+ minimum size
|
||||
|
||||
### Browser Support
|
||||
- Chrome/Edge 90+
|
||||
- Firefox 88+
|
||||
- Safari 14+
|
||||
- Mobile browsers (iOS 14+, Android Chrome 90+)
|
||||
|
||||
## Design Credits
|
||||
|
||||
**Ported from ICW NextSpread** (icantwait.ca):
|
||||
- Property page animations (HeroEditorial, Gallery, About components)
|
||||
- Adaptive duration timing system
|
||||
- Scroll-speed-based animation adjustments
|
||||
- Webflow-style easing curves
|
||||
- Typography scale and color palette
|
||||
- Touch target sizes and spacing
|
||||
|
||||
**Inspired by**:
|
||||
- Airbnb editorial pages (magazine layouts)
|
||||
- Medium long-form articles (typography)
|
||||
- Notion docs (clean, readable prose)
|
||||
|
||||
## Repository
|
||||
|
||||
- **GitHub**: https://github.com/dannystocker/IF.docs.md2html
|
||||
- **Branch**: `main`
|
||||
- **Commit**: f950357
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. **Deploy to StackCP**: Follow `DEPLOY.md` instructions
|
||||
2. **Test URL parsing**: Try with InfraFabric docs
|
||||
3. **Add features**:
|
||||
- Table of contents sidebar
|
||||
- Dark mode toggle
|
||||
- Export to PDF
|
||||
- Social sharing
|
||||
- Print stylesheet
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
---
|
||||
|
||||
**Created**: 2025-11-14
|
||||
**Author**: Claude Code
|
||||
**Design System**: ICW NextSpread (icantwait.ca)
|
||||
Loading…
Add table
Reference in a new issue