Skip to content

Commit ebbab08

Browse files
committed
Add shareable project and story pages with filters
- Convert projects and stories to individual shareable pages with unique URLs - Add ProjectDetail and StoryDetail components with share functionality - Add category filters to Projects page (similar to Photography) - Add three new projects: Design for All, Rails Accessibility Testing, Trip Planner - Consolidate accessibility categories into single 'Accessibility' category - Add long descriptions and links to projects - Update navigation to use routing instead of modals - Add documentation files for project and Stories of Impact
1 parent 2c77e13 commit ebbab08

8 files changed

Lines changed: 1178 additions & 265 deletions

File tree

PROJECT_DOCUMENTATION.md

Lines changed: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,257 @@
1+
# Regan Maharjan Portfolio Website - Project Documentation
2+
3+
## Project Overview
4+
5+
This is a comprehensive portfolio website for Regan Maharjan, showcasing work across accessibility, education technology, AI systems, and data engineering. The site is built as a modern single-page application using React, TypeScript, and Vite, with a focus on accessibility, performance, and user experience.
6+
7+
### Technical Stack
8+
9+
- **Framework**: React 18.3.1 with TypeScript
10+
- **Build Tool**: Vite 6.3.5
11+
- **Routing**: React Router DOM (HashRouter)
12+
- **Styling**: Tailwind CSS with custom design system
13+
- **UI Components**: Radix UI primitives with custom styling
14+
- **Animations**: Motion (Framer Motion)
15+
- **Content Management**: Centralized content data structure in `src/data/content.ts`
16+
17+
### Key Features
18+
19+
- **Accessibility-First Design**: WCAG 2.1 AA compliant with semantic HTML and ARIA labels
20+
- **Responsive Layout**: Mobile-first design that works across all device sizes
21+
- **Performance Optimized**: Fast loading times with optimized assets and code splitting
22+
- **Content-Driven**: Centralized content management for easy updates
23+
- **Interactive Storytelling**: Rich narrative experiences for impact stories and adventures
24+
25+
---
26+
27+
## What is "Stories of Impact"?
28+
29+
**Stories of Impact** is a dedicated section of the portfolio that tells the human story behind Regan's technical work, particularly focusing on projects that created meaningful change in Nepal and beyond. Unlike the "Projects" page which focuses on technical details, problem-solving approaches, and metrics, "Stories of Impact" emphasizes the **human narrative, community outcomes, and lasting change**.
30+
31+
### Purpose and Philosophy
32+
33+
The "Stories of Impact" section exists to:
34+
35+
1. **Connect Technology to People**: Show how technical work translates into real-world impact for students, teachers, and communities
36+
2. **Tell the Full Story**: Go beyond code and metrics to share the context, challenges, and human experiences
37+
3. **Demonstrate Values**: Illustrate commitment to digital equity, accessibility, and community-centered design
38+
4. **Show Long-Term Impact**: Highlight how systems built years ago continue to serve communities today
39+
40+
### Key Distinctions from "Projects" Page
41+
42+
| Aspect | Projects Page | Stories of Impact |
43+
|--------|--------------|-------------------|
44+
| **Focus** | Technical implementation, problem-solving, metrics | Human stories, community outcomes, lasting change |
45+
| **Tone** | Professional, technical, achievement-oriented | Narrative, reflective, community-centered |
46+
| **Structure** | Problem → Approach → Solution → Result | Personal reflection → What was built → Impact today |
47+
| **Metrics** | Technical metrics (users, performance, adoption) | Community impact (students reached, schools served, years of service) |
48+
| **Content Style** | Case study format | Storytelling format |
49+
50+
### Content Structure
51+
52+
Each story in "Stories of Impact" includes:
53+
54+
1. **Title & Excerpt**: A compelling headline and brief teaser
55+
2. **Date**: When the work took place
56+
3. **Icon & Theme**: Visual categorization (Globe, BookOpen, Heart, Laptop, Users, Zap)
57+
4. **Description**: Personal narrative about the work and its context
58+
5. **What I Built**: Bulleted list of key technical contributions
59+
6. **Impact Today**: Reflection on how the work continues to create value
60+
7. **Impact by Numbers** (for featured stories): Quantifiable community outcomes
61+
62+
### Featured Stories
63+
64+
The section currently includes 8 stories:
65+
66+
1. **Building Technology for Learning and Equity in Nepal** (Featured)
67+
- Main story with comprehensive stats
68+
- Covers 7 years of work with OLE Nepal
69+
- 300,000+ students reached, 700+ modules converted
70+
71+
2. **Community Leadership and Accessible Learning through Rotaract and Rotary**
72+
- Early community work and volunteer coordination
73+
- 100+ audiobooks produced for accessible learning
74+
75+
3. **E-Pustakalaya: National Digital Library**
76+
- Modernization of Nepal's digital library
77+
- Still active today with offline mirrors across the country
78+
79+
4. **Offline Learning During COVID-19**
80+
- Critical response to school closures
81+
- 700+ modules converted to offline packages
82+
- Deployed to 200+ schools during lockdown
83+
84+
5. **OCR + TTS for Visually Impaired Students**
85+
- Nepal's first OCR and text-to-speech system
86+
- Expanded into larger accessible content pipeline
87+
88+
6. **E-Paath Interactive Learning**
89+
- Nepal's first digital learning platform for grades 1-8
90+
- Still widely used in public schools
91+
92+
7. **Technical Infrastructure for Rural Schools**
93+
- Building systems that work in real conditions
94+
- Many school servers still running years later
95+
96+
8. **Teacher Training & Human-Centered Design**
97+
- Supporting educators across districts
98+
- Ensuring technology actually gets used
99+
100+
### Technical Implementation
101+
102+
The "Stories of Impact" section is implemented in `src/components/pages/Impact.tsx`:
103+
104+
- **Component**: `Impact` functional component using React hooks
105+
- **State Management**: `useState` for selected story navigation
106+
- **Animations**: Framer Motion for smooth transitions and entrance animations
107+
- **Layout**: Responsive grid that adapts from 1 column (mobile) to 3 columns (desktop)
108+
- **Content Source**: Centralized data from `src/data/content.ts` under `contentData.impact`
109+
110+
#### Key Features:
111+
112+
1. **Story Grid View**: Displays all stories as clickable cards with thumbnails
113+
2. **Story Detail View**: Full narrative experience when a story is selected
114+
3. **Theme-Based Styling**: Each story has a color theme (blue, green, purple, indigo, teal, orange)
115+
4. **Image Support**: Stories can include images to illustrate the work
116+
5. **Stats Display**: Featured stories show impact metrics in a grid layout
117+
6. **Call-to-Action**: Connect section at the bottom for engagement
118+
119+
### Design Philosophy
120+
121+
The design emphasizes:
122+
123+
- **Readability**: Large, clear typography optimized for reading long-form content
124+
- **Visual Hierarchy**: Clear distinction between story cards and detail views
125+
- **Emotional Connection**: Use of imagery, gradients, and thoughtful spacing
126+
- **Accessibility**: Semantic HTML, proper ARIA labels, keyboard navigation
127+
- **Performance**: Lazy loading, optimized images, smooth animations
128+
129+
### Content Management
130+
131+
All content is managed in `src/data/content.ts` under the `impact` key:
132+
133+
```typescript
134+
"impact": {
135+
"hero": {
136+
"title": "Stories of Impact",
137+
"subtitle": "A collection of stories "
138+
},
139+
"stories": [
140+
// Array of story objects
141+
],
142+
"labels": {
143+
// UI labels for internationalization
144+
}
145+
}
146+
```
147+
148+
This centralized approach allows for:
149+
- Easy content updates without touching component code
150+
- Potential future internationalization
151+
- Consistent content structure
152+
- Version control for content changes
153+
154+
### User Experience Flow
155+
156+
1. **Landing**: User arrives at `/impact` route
157+
2. **Overview**: Sees hero section with title and subtitle
158+
3. **Browse**: Scrolls through grid of story cards
159+
4. **Explore**: Clicks a story card to read full narrative
160+
5. **Engage**: Reads detailed story with images, work items, and impact reflection
161+
6. **Connect**: Sees call-to-action to reach out or learn more
162+
7. **Return**: Can navigate back to browse other stories
163+
164+
---
165+
166+
## Project Architecture
167+
168+
### File Structure
169+
170+
```
171+
src/
172+
├── components/
173+
│ ├── pages/
174+
│ │ ├── Impact.tsx # Stories of Impact page
175+
│ │ ├── StoriesOfAdventure.tsx
176+
│ │ ├── Projects.tsx
177+
│ │ └── ...
178+
│ ├── ui/ # Reusable UI components
179+
│ └── ...
180+
├── data/
181+
│ └── content.ts # Centralized content data
182+
├── utils/
183+
│ └── imageUtils.ts # Image handling utilities
184+
└── App.tsx # Main app with routing
185+
```
186+
187+
### Routing
188+
189+
The site uses HashRouter for GitHub Pages compatibility:
190+
191+
- `/` - Home page
192+
- `/impact` - Stories of Impact (this section)
193+
- `/projects` - Technical projects showcase
194+
- `/storiesofadventure` - Personal adventure stories
195+
- `/about` - About page
196+
- `/experience` - Professional experience
197+
- `/accessibility` - Accessibility work details
198+
- `/photography` - Photography portfolio
199+
- `/contact` - Contact form
200+
201+
### Content Strategy
202+
203+
The portfolio uses a two-pronged approach:
204+
205+
1. **Projects Page**: Technical showcase for recruiters, clients, and technical audiences
206+
2. **Stories of Impact**: Narrative showcase for understanding values, community impact, and long-term outcomes
207+
208+
This dual approach allows the portfolio to serve different audiences while maintaining authenticity and depth.
209+
210+
---
211+
212+
## Development
213+
214+
### Getting Started
215+
216+
```bash
217+
npm install
218+
npm run dev
219+
```
220+
221+
### Building for Production
222+
223+
```bash
224+
npm run build
225+
```
226+
227+
### Key Dependencies
228+
229+
- React & React DOM for UI
230+
- React Router DOM for navigation
231+
- Motion (Framer Motion) for animations
232+
- Radix UI for accessible component primitives
233+
- Tailwind CSS for styling
234+
- Lucide React for icons
235+
236+
---
237+
238+
## Future Enhancements
239+
240+
Potential improvements for the Stories of Impact section:
241+
242+
1. **Search/Filter**: Allow filtering stories by theme, date, or impact area
243+
2. **Video Content**: Support for embedded videos showing the work in action
244+
3. **Testimonials**: Quotes from teachers, students, or community members
245+
4. **Timeline View**: Visual timeline showing the progression of impact over time
246+
5. **Related Stories**: Cross-linking between related stories
247+
6. **Share Functionality**: Social sharing for individual stories
248+
7. **Multilingual Support**: Translations for Nepali and other languages
249+
250+
---
251+
252+
## Conclusion
253+
254+
"Stories of Impact" represents a commitment to telling the full story of technical work—not just what was built, but why it matters, who it serves, and how it continues to create value. It bridges the gap between technical achievement and human outcomes, demonstrating that the most meaningful work happens at the intersection of technology, empathy, and community.
255+
256+
This section serves as a reminder that behind every line of code, every system architecture decision, and every technical solution, there are real people whose lives are improved, whose access is expanded, and whose opportunities are created. It's this human-centered perspective that makes "Stories of Impact" a unique and valuable part of the portfolio.
257+

STORIES_OF_IMPACT_EXPLANATION.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# Stories of Impact - Explanation for AI Systems
2+
3+
## Quick Summary
4+
5+
**Stories of Impact** is a narrative-driven section of Regan Maharjan's portfolio website that tells the human story behind technical work, focusing on community outcomes and lasting change rather than just technical implementation details.
6+
7+
## What It Is
8+
9+
A curated collection of 8 stories that showcase:
10+
- **Community impact** from technical projects in Nepal
11+
- **Long-term outcomes** of educational technology work
12+
- **Human-centered narratives** about building accessible, equitable systems
13+
- **Real-world results** from 7+ years of work with OLE Nepal and other organizations
14+
15+
## Key Distinction
16+
17+
Unlike the "Projects" page (which focuses on technical problem-solving, code, and metrics), "Stories of Impact" emphasizes:
18+
- Personal reflection and context
19+
- Community outcomes and human experiences
20+
- How systems continue to serve people years later
21+
- The values and philosophy behind the work
22+
23+
## Content Structure
24+
25+
Each story contains:
26+
1. **Title & Excerpt**: Compelling headline
27+
2. **Date**: When the work occurred
28+
3. **Description**: Personal narrative about the work
29+
4. **What I Built**: Technical contributions (bulleted)
30+
5. **Impact Today**: Reflection on ongoing value
31+
6. **Stats** (for featured stories): Quantifiable community outcomes
32+
33+
## Featured Stories Include
34+
35+
1. **Building Technology for Learning and Equity in Nepal** (Main story)
36+
- 300,000+ students reached
37+
- 700+ modules converted
38+
- 200+ schools served
39+
- 7 years of building in Nepal
40+
41+
2. **Community Leadership through Rotaract/Rotary**
42+
- 100+ accessible audiobooks produced
43+
- Early accessibility work
44+
45+
3. **E-Pustakalaya Digital Library**
46+
- Still active today with offline mirrors
47+
48+
4. **Offline Learning During COVID-19**
49+
- 700+ modules converted to offline packages
50+
- Critical response to school closures
51+
52+
5. **OCR + TTS for Visually Impaired Students**
53+
- Nepal's first accessible content system
54+
55+
6. **E-Paath Interactive Learning**
56+
- Nepal's first digital learning platform
57+
58+
7. **Technical Infrastructure for Rural Schools**
59+
- Systems built for real-world constraints
60+
61+
8. **Teacher Training & Human-Centered Design**
62+
- Ensuring technology actually gets used
63+
64+
## Technical Implementation
65+
66+
- **Location**: `src/components/pages/Impact.tsx`
67+
- **Route**: `/impact`
68+
- **Content Source**: `src/data/content.ts``contentData.impact`
69+
- **Framework**: React with TypeScript
70+
- **Animations**: Framer Motion
71+
- **Styling**: Tailwind CSS with theme-based colors
72+
73+
## Purpose
74+
75+
To demonstrate:
76+
- Commitment to digital equity and accessibility
77+
- Long-term thinking and sustainable solutions
78+
- Community-centered design approach
79+
- Real-world impact beyond technical metrics
80+
- Values-driven technical work
81+
82+
## Target Audience
83+
84+
- People interested in understanding the "why" behind technical work
85+
- Community members, educators, and non-technical stakeholders
86+
- Anyone wanting to understand values and impact philosophy
87+
- Potential collaborators interested in meaningful work
88+
89+
---
90+
91+
**In essence**: "Stories of Impact" answers the question "Why does this work matter?" rather than "How was it built?" It's the human story behind the code.
92+

src/App.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import { Home } from './components/pages/Home';
55
import { About } from './components/pages/About';
66
import { Experience } from './components/pages/Experience';
77
import { Projects } from './components/pages/Projects';
8+
import { ProjectDetail } from './components/pages/ProjectDetail';
89
import { Impact } from './components/pages/Impact';
10+
import { StoryDetail } from './components/pages/StoryDetail';
911
import { StoriesOfAdventure } from './components/pages/StoriesOfAdventure';
1012
import { Accessibility } from './components/pages/Accessibility';
1113
import { Contact } from './components/pages/Contact';
@@ -23,7 +25,9 @@ export default function App() {
2325
<Route path="/about" element={<About />} />
2426
<Route path="/experience" element={<Experience />} />
2527
<Route path="/projects" element={<Projects />} />
28+
<Route path="/projects/:projectId" element={<ProjectDetail />} />
2629
<Route path="/impact" element={<Impact />} />
30+
<Route path="/impact/:storyId" element={<StoryDetail />} />
2731
<Route path="/storiesofadventure" element={<StoriesOfAdventure />} />
2832
<Route path="/accessibility" element={<Accessibility />} />
2933
<Route path="/contact" element={<Contact />} />

0 commit comments

Comments
 (0)