Nicole Gesare Onyiego’s Portfolio: Development, Organization, and Inspirations
Inspiration
As a multidisciplinary creator—game developer, artist, and web developer—I envisioned a portfolio that not only showcases my work but also tells my story. I wanted an experience that merges interactivity, aesthetics, and personalization to reflect my diverse passions in game development, web design, IoT, and art.
Rather than going with a generic layout, I aimed to build something vibrant, immersive, and technically creative. My design inspirations pulled from:
- Cyberpunk Aesthetics: Neon hues, glitch effects, and futuristic UIs inspired by Cyberpunk 2077 and sci-fi design systems
- Creative Interactive Portfolios: Bruno Imbrizi’s particle art and the 3D web storytelling of sites like Sharyap.com and Awwwards winners
- CLI and Terminal Themes: Text animations and command-line-styled prompts for a developer-friendly vibe
- Sci-fi UI Design: Holographic interfaces, data visualizations, and “system boot” narratives
What It Does
My portfolio is an interactive web experience designed to invite visitors into my world:
- Dynamic Homepage: Smooth scroll, animated transitions, and cyberpunk effects
- Projects Section: Live previews, GitHub links, category tags
- About Timeline: Chronicles my journey through engineering, art, and innovation
- AI Portfolio Assistant: OpenAI-powered chatbot to guide visitors
- Theme Switcher: Light, dark, and creative (cyberpunk) modes
- Responsive Design: Mobile-first layouts with fluid responsiveness
- Accessibility Built-in: Alt-text, keyboard navigation, and contrast controls
- Blog Area: Technical insights, development lessons, and personal reflections
Technologies and Development
Core Stack
- Frontend: Next.js (React framework) with TypeScript
- Styling: Tailwind CSS and custom CSS for cyberpunk theme
- Backend: Flask API serving dynamic content (e.g., blog, projects)
- 3D + Animation: React Three Fiber (Three.js), @react-three/drei, Framer Motion
- Hosting: Vercel (frontend), Render (backend)
- Auth (Planned): JWT for future CMS-style admin panel
- Extras: OpenAI API, Formik for forms, LottieFiles for animations
Component Architecture
- Atomic Design: Small components building into complex sections
- Dynamic Imports: Used for heavy/3D components to optimize load times
- Client vs Server Components: Clear separation for performance
- Progressive Enhancement: Core experience works without JS; JS enhances
Project Structure
/app # Next.js App Router
/api # Flask-integrated API routes
/layout.tsx # Root layout
/page.tsx # Main landing page
/components
/sections # Hero, About, Projects, etc.
/three # Three.js components
/ui # Reusable UI (shadcn/ui)
/loading # Custom loading screens
/public
/fonts # Custom typography
/images # Static assets
/hooks # Custom logic (e.g., useMobile, useTheme)
Key Development Techniques
Responsive Layout
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
3D Integration (React Three Fiber)
function ProfileSphere() {
const meshRef = useRef()
useFrame(({ clock }) => {
if (meshRef.current) {
meshRef.current.rotation.y = clock.getElapsedTime() * 0.1
}
})
return (
<mesh ref={meshRef}>
<circleGeometry args={[2, 64]} />
<meshStandardMaterial />
</mesh>
)
}
Theme System (Cyberpunk Mode)
.cyberpunk {
--background: 230 35% 7%;
--primary: 320 100% 60%;
}
Performance Optimizations
- Dynamic imports for heavy assets
- Lazy loading images with fallbacks
- State-based conditional rendering to avoid unnecessary loads
- Cleanup of listeners on
useEffect
Custom Hook Example
export const useMobile = () => {
const [isMobile, setIsMobile] = useState(false)
useEffect(() => {
const handleResize = () => setIsMobile(window.innerWidth < 768)
handleResize()
window.addEventListener("resize", handleResize)
return () => window.removeEventListener("resize", handleResize)
}, [])
return isMobile
}
Achievements and Lessons
Accomplishments
- Created a visually expressive, technically rich portfolio
- Seamlessly merged storytelling and interactivity
- Integrated AI meaningfully (not just as a gimmick)
- <2s load time on desktop via image optimization and code splitting
- Positive feedback from mentors and peers on its usability and uniqueness
Key Learnings
- Combining Framer Motion + Three.js for high-impact visuals
- Accessibility goes beyond just alt-text—it’s a design mindset
- Strong frontend-backend coordination using fetch/Flask
- Design thinking: how users feel matters as much as what they do
- Telling a story through code is as powerful as the features themselves
What’s Next for Nicole Gesare Onyiego
- Add a digital/traditional art gallery with filtering by medium
- Expand blog into a learning hub on creative tech
- Build an immersive Unity WebGL “game resume”
- Develop a full CMS dashboard to manage content and analytics
Built With
- framer
- javascript
- nextjs
- python
- react
- tailwind
- three.js
- typescript
- vercel

Log in or sign up for Devpost to join the conversation.