mirror of
https://github.com/harivansh-afk/Austens-Wedding-Guide.git
synced 2026-04-15 09:01:13 +00:00
11 KiB
11 KiB
Technical Documentation - Austen's Wedding Guide
Project Overview
A React-based web application that serves as a modern wedding guide themed around Jane Austen's works. The project combines literary analysis with interactive features, presenting Austen's insights in a contemporary context.
Tech Stack
- Framework: React with TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS
- UI Components: Shadcn/UI
- Routing: React Router
- Package Manager: npm
Project Structure
src/
├── components/
│ ├── ui/ # Shadcn UI components
│ ├── layout/ # Layout components
│ ├── vendor/ # Vendor-specific components
│ ├── BlogPost.tsx # Blog post component
│ ├── CommentSection.tsx
│ ├── ErrorBoundary.tsx
│ ├── Footer.tsx
│ ├── Layout.tsx
│ ├── LoadingSpinner.tsx
│ ├── Navbar.tsx
│ ├── Pagination.tsx
│ ├── QuoteDisplay.tsx
│ ├── ShareButtons.tsx
│ └── theme-provider.tsx
│
├── data/
│ ├── blog-posts.ts # Character blog content
│ ├── quotes.ts # Austen quotes
│ ├── quiz.ts # Character quiz data
│ ├── success-stories.ts
│ ├── literary-analysis.ts # Literary analysis data
│ ├── comparative-analysis.ts # Comparative analysis data
│ └── vendors.ts
│
├── pages/
│ ├── BlogPost/
│ ├── Analysis.tsx # Literary analysis page
│ ├── Blogs.tsx
│ ├── Home.tsx
│ ├── MarketCalculator.tsx
│ ├── Quiz.tsx
│ ├── Stories.tsx
│ ├── SuccessStories.tsx
│ ├── ComparativeAnalysis.tsx # Comparative analysis page
│ └── Vendors.tsx
Routing Structure
The application uses React Router for navigation with the following route structure:
<Routes>
<Route path="/" element={<Home />} />
<Route path="/blogs" element={<Blogs />} />
<Route path="/blogs/:id" element={<BlogPost />} />
<Route path="/quiz" element={<Quiz />} />
<Route path="/vendors" element={<Vendors />} />
<Route path="/success-stories" element={<SuccessStories />} />
<Route path="/market-calculator" element={<MarketCalculator />} />
<Route path="/analysis" element={<Analysis />} />
<Route path="/comparative" element={<ComparativeAnalysis />} />
<Route path="/network" element={<NetworkVisualization />} />
</Routes>
Navigation Updates
- Main navigation in
Navbar.tsxincludes:- Primary navigation group with consistent button styling
- Secondary navigation group for analysis features
- Visual separation between groups using border
- All buttons styled with sage color scheme
- Home page features:
- Literary Analysis card in featured sections
- Direct link to analysis content
- Layout structure:
- MainLayout component wraps all pages
- Consistent header with navigation
- Footer with copyright and quote
Route Integration
- Analysis page is directly accessible via
/analysis - Comparative analysis accessible via
/comparative - Character network visualization via
/network - Integrated into main navigation flow
- Maintains consistent layout and styling
- Proper error handling and loading states
Key Features
1. Content Management
- Data is stored in TypeScript files with strong typing
- Content is organized by characters and themes
- Modular content structure for easy updates
- New: Comprehensive literary analysis data structure with detailed novel analysis
2. UI Components
- Custom components built on Shadcn/UI
- Responsive design using Tailwind CSS
- Consistent theme using custom color palette:
- Sage
- Cream
- Rose
- New: Interactive novel selector and tabbed analysis interface
3. Interactive Features
- Character quiz with result mapping
- Blog comment system
- Share functionality
- Pagination for content lists
- Market calculator
- New: Literary analysis with themed tabs and novel selection
- New: Comparative analysis for cross-novel exploration
- New: Character network visualization
4. Performance Considerations
- Component-based architecture for better code splitting
- Error boundaries for graceful error handling
- Loading states for better UX
- Client-side routing for smooth navigation
Styling
The project uses a combination of:
- Tailwind CSS for utility-first styling
- Custom components from Shadcn/UI
- Custom theme variables for consistent branding
- Responsive design patterns
- New: Scrollable content areas with consistent styling
- New: Themed cards and tabs for analysis content
Typography
- Headings: Cormorant font family
- Body: Lato font family
- Consistent text sizing using Tailwind's scale
Component Architecture
Layout Components
Layout.tsx: Main layout wrapperNavbar.tsx: Navigation headerFooter.tsx: Site footerErrorBoundary.tsx: Error handling wrapper
Content Components
BlogPost.tsx: Blog post displayQuoteDisplay.tsx: Quote formattingCommentSection.tsx: User commentsShareButtons.tsx: Social sharing- New: Analysis.tsx: Literary analysis with novel selection and tabbed content
UI Components
Extensive UI component library including:
- Buttons
- Cards
- Forms
- Modals
- Navigation menus
- Tables
- Toast notifications
- New: Select dropdown for novel selection
- New: Tabs for content organization
- New: ScrollArea for content sections
Data Structure
Blog Posts
interface BlogPost {
id: string;
title: string;
author: string;
authorImage: string;
date: string;
content: string[];
}
Quiz System
interface QuizQuestion {
id: string;
question: string;
options: QuizOption[];
}
interface QuizResult {
character: string;
quote: string;
description: string;
book: string;
matchAdvice: string;
}
Literary Analysis
// Novel Analysis Structure
interface NovelAnalysis {
title: string;
publicationYear: number;
mainThemes: ThematicElement[];
characterAnalysis: CharacterAnalysis[];
socialCommentary: SocialCommentary[];
literaryDevices: LiteraryDevice[];
}
// Theme Analysis
interface ThematicElement {
theme: string;
description: string;
examples: {
quote: string;
source: string;
analysis: string;
}[];
significance: string;
}
// Available Novels
const novelAnalyses = {
prideAndPrejudice: NovelAnalysis;
northangerAbbey: NovelAnalysis;
senseAndSensibility: NovelAnalysis;
mansfieldPark: NovelAnalysis;
}
Pages and Components
Analysis Page
- Path:
/analysis - Features:
- Novel selector dropdown
- Tabbed interface for different analysis aspects
- Scrollable content areas
- Themed styling
- Content Sections:
- Themes
- Characters
- Social Commentary
- Literary Devices
Data Organization
src/data/literary-analysis.ts: Contains structured analysis data for all novels- Pride and Prejudice
- Northanger Abbey
- Sense and Sensibility
- Mansfield Park
- Each novel includes:
- Main themes with examples and significance
- Character analysis with development and key quotes
- Social commentary with modern relevance
- Literary devices with examples and effects
Best Practices
- TypeScript for type safety
- Component-based architecture
- Consistent file naming
- Modular CSS with Tailwind
- Error handling with boundaries
- Loading state management
- Responsive design patterns
- New: Structured content organization
- New: Interactive content navigation
Future Considerations
- Content expansion opportunities
- Performance optimization
- Accessibility improvements
- SEO optimization
- Content management system integration
- New: Additional novel analysis features
- New: Comparative analysis tools
Character Network Feature
Interactive Graph Component
The character network visualization is implemented using a force-directed graph with the following features:
interface CharacterNode {
id: string;
name: string;
novel: string;
class: string;
type: "protagonist" | "antagonist" | "supporting";
}
interface GraphConfig {
nodeRelSize: number;
nodeVal: number;
width: number;
height: number;
staticGraph: boolean;
enableNodeDrag: boolean;
enableZoom: boolean;
}
Key Features
-
Static Node Positioning
- Nodes are arranged in a circular layout
- Fixed positions prevent unwanted movement
- Calculated using mathematical formulas for even distribution
-
Interaction Handling
- Single-click node selection
- Debounced click handling (300ms)
- Click processing state management
- Cleanup of timeouts on unmount
-
Visual Configuration
- Node colors based on character type:
- Protagonist: Green (#4CAF50)
- Antagonist: Red (#f44336)
- Supporting: Blue (#2196F3)
- Node size: 8 units (nodeRelSize)
- Link width: 2 units
- Link opacity: 0.6
- Node colors based on character type:
-
Performance Optimizations
- Disabled force simulation cooldown
- Zero warmup ticks
- Removed hover effects and tooltips
- Static graph configuration
-
UI Components
- Main graph container (600x600px)
- Right-side information panel (300px width)
- Smooth transitions for panel visibility
- Responsive layout with flex container
Implementation Details
// Node Click Handler
const handleNodeClick = useCallback(
(node) => {
if (!node || isProcessingClick) return;
setIsProcessingClick(true);
setSelectedNode(node);
onNodeSelect(node);
// Reset after 300ms
clickTimeoutRef.current = setTimeout(() => {
setIsProcessingClick(false);
}, 300);
},
[onNodeSelect, isProcessingClick]
);
// Graph Configuration
const graphConfig = {
staticGraph: true,
enableNodeDrag: false,
enableZoom: true,
minZoom: 0.5,
maxZoom: 2.5,
cooldownTime: 0,
warmupTicks: 0,
nodeLabel: null,
enableNodeHover: false,
};
Styling
The component uses a flex layout with the following structure:
// Container
{
display: flex;
gap: 20px;
width: 100%;
maxwidth: 1000px;
margin: 0 auto;
}
// Graph Container
{
width: 600px;
height: 600px;
border: 1px solid #eee;
position: relative;
}
// Information Panel
{
width: 300px;
padding: 20px;
backgroundcolor: #fff;
border: 1px solid #eee;
borderradius: 4px;
transition: opacity 0.2s ease-in-out;
}
Best Practices
-
State Management
- Use of React hooks for state
- Proper cleanup of timeouts
- Controlled component updates
-
Performance
- Debounced click handling
- Static node positioning
- Minimal re-renders
-
User Experience
- Smooth transitions
- Clear visual feedback
- Responsive layout
-
Code Organization
- Modular component structure
- Clear configuration objects
- Type-safe interfaces