/* global React */ // Hi-fi Portfolio — Minimal Modernist // Components for the polished single-page site const HeroAmbient = () => { // subtle drifting noise/blob field — SVG, low opacity, slow return ( {/* slow drifting blobs */} {/* faint horizon line */} {/* grain overlay */} ); }; const Hero = () => (
Open to junior full-stack roles · remote-friendly · 2026
@SevenLawless — 101

Zakaria Zaoui,
junior full-stack developer.

A small portfolio. A few projects. Honest notes on what I'm learning, and a brain to show you how it all connects.

view cv scroll
); const About = () => (
02
about
a paragraph, some facts

A short introduction.

I'm Zakaria Zaoui — a junior full-stack developer based in Morocco and open to remote work. I build practical web applications, backend APIs, automation tools, and database-backed systems using technologies like React, Node.js, Express, Python, SQL, and MySQL.

I care about building software that solves real problems, not just looks good in screenshots. I like clean workflows, stable backends, clear data, simple interfaces, and products that are useful enough to become part of someone's daily routine — especially mine.

Outside of code, I'm into gaming, 3D design, boxing, and hiking. I enjoy anything that mixes logic and creativity, especially when it helps me advance in life, learn faster, or build something more useful than a normal portfolio piece.

{[ ['Based in', 'Morocco · open to remote work'], ['Stack', 'React · Vite · Node.js · Express · Python · SQL · MySQL'], ['Status', 'Open to junior developer, Python, backend, full-stack, application support, technical support, freelance, and collaboration opportunities.'], ['Outside', 'Gaming · 3D design · Boxing · Hiking'], ['Years in', 'Since I can remember'], ].map(([k, v]) => (
{k}
{v}
))}
); // ===== BRAIN ===== const PROJECTS = [ { id: 1, title: 'ChioOS', tag: 'web app', side: 'L', desc: 'Private Life OS for expenses, workouts, jobs, documents, media, backups, and personal workflows.', tags: ['React', 'Vite', 'Node.js', 'Express', 'MySQL'], repo: 'https://github.com/SevenLawless/ChioOSVP' }, { id: 2, title: 'Sheriff — Doc', tag: 'AI / OCR', side: 'L', desc: 'AI-assisted OCR pipeline for classifying and extracting data from scanned French and Arabic legal files.', tags: ['Python', 'OCR', 'NLP', 'SQL', 'APIs'], repo: 'https://github.com/SevenLawless/LegalDocClass' }, { id: 3, title: 'Buggy', tag: 'support tool', side: 'L', desc: 'Bug-tracking dashboard for managing projects, issues, incidents, and resolution workflows.', tags: ['React', 'Node.js', 'Express', 'MySQL', 'REST APIs'], repo: 'https://github.com/SevenLawless/Buggy' }, { id: 4, title: 'Poms AI', tag: 'creative AI', side: 'R', desc: 'Creative prompt-building tool for generating richer image prompts using style, mood, lighting, and composition.', tags: ['React', 'Vite', 'Prompt Engineering', 'UI Design', 'AI Workflows'], repo: 'https://github.com/SevenLawless/Poms_v2' }, { id: 5, title: 'CaseForge AI', tag: 'developer tool', side: 'R', desc: 'Turns rough project notes into polished case studies, README sections, and resume bullets.', tags: ['React', 'Vite', 'JavaScript', 'LocalStorage', 'AI Workflows'], repo: 'https://github.com/SevenLawless/CaseForge-AI' } ]; // 1240 x 1380 viewBox — taller stage so cards don't collide at any width const BRAIN = (() => { const W = 1240, H = 1380; const cx = W/2, cy = 680; const bw = 460, bh = 320; return { W, H, cx, cy, bw, bh }; })(); // Anatomical brain path — top-down view of cerebrum const brainPathD = (() => { const { cx, cy, bw, bh } = BRAIN; return ` M ${cx - bw*0.45} ${cy - bh*0.05} C ${cx - bw*0.55} ${cy - bh*0.32}, ${cx - bw*0.42} ${cy - bh*0.55}, ${cx - bw*0.28} ${cy - bh*0.55} C ${cx - bw*0.22} ${cy - bh*0.62}, ${cx - bw*0.08} ${cy - bh*0.6}, ${cx - bw*0.02} ${cy - bh*0.5} C ${cx + bw*0.02} ${cy - bh*0.62}, ${cx + bw*0.16} ${cy - bh*0.62}, ${cx + bw*0.22} ${cy - bh*0.55} C ${cx + bw*0.32} ${cy - bh*0.58}, ${cx + bw*0.5} ${cy - bh*0.36}, ${cx + bw*0.48} ${cy - bh*0.1} C ${cx + bw*0.55} ${cy + bh*0.18}, ${cx + bw*0.42} ${cy + bh*0.42}, ${cx + bw*0.28} ${cy + bh*0.46} C ${cx + bw*0.18} ${cy + bh*0.58}, ${cx + bw*0.06} ${cy + bh*0.55}, ${cx} ${cy + bh*0.5} C ${cx - bw*0.06} ${cy + bh*0.55}, ${cx - bw*0.18} ${cy + bh*0.58}, ${cx - bw*0.28} ${cy + bh*0.46} C ${cx - bw*0.42} ${cy + bh*0.42}, ${cx - bw*0.55} ${cy + bh*0.18}, ${cx - bw*0.45} ${cy - bh*0.05} Z `; })(); // anchor points (where wires meet brain edge) per project const anchors = { 1: { x: BRAIN.cx - BRAIN.bw*0.5, y: BRAIN.cy - BRAIN.bh*0.45 }, 2: { x: BRAIN.cx - BRAIN.bw*0.55, y: BRAIN.cy + BRAIN.bh*0.0 }, 3: { x: BRAIN.cx - BRAIN.bw*0.42, y: BRAIN.cy + BRAIN.bh*0.45 }, 4: { x: BRAIN.cx + BRAIN.bw*0.5, y: BRAIN.cy - BRAIN.bh*0.4 }, 5: { x: BRAIN.cx + BRAIN.bw*0.48, y: BRAIN.cy + BRAIN.bh*0.4 }, }; // card positions (top-left x/y in viewBox space) — spaced ~470px apart for 348px-tall cards const cardLayout = { 1: { x: 20, y: 30 }, 2: { x: 0, y: 510 }, 3: { x: 30, y: 990 }, 4: { x: 956, y: 80 }, 5: { x: 956, y: 920 }, }; const Brain = ({ activeId, setActiveId }) => { const { W, H, cx, cy, bw, bh } = BRAIN; const stageRef = React.useRef(null); // wire color per side const wireColor = (side) => side === 'L' ? 'var(--red)' : 'var(--blue)'; return (
{/* hemisphere tints */} {/* connection wires (drawn before card surfaces, after brain tint) */} {PROJECTS.map(p => { const a = anchors[p.id]; const c = cardLayout[p.id]; const cardX = p.side === 'L' ? c.x + 264 : c.x; const cardY = c.y + 60; const isLeft = p.side === 'L'; const dx = cardX - a.x; const c1x = a.x + dx * 0.25; const c1y = a.y; const c2x = a.x + dx * 0.75; const c2y = cardY; const isActive = activeId === p.id; return ( {/* anchor dot on brain */} {/* card-side dot */} {/* gentle pulse along wire when active */} {isActive && ( )} ); })} {/* brain outline */} {/* longitudinal fissure */} {/* sulci — left, organic */} {/* sulci — right */} {/* cerebellum hint at bottom */} {/* hemisphere labels */} L · LOGIC structure · systems R · CRAFT curiosity · feel {/* tiny scale marks at bottom */} fig.01 · projects.brain — 5 nodes shown {/* CARDS */} {PROJECTS.map(p => { const c = cardLayout[p.id]; return ( setActiveId(p.id)} onLeave={() => setActiveId(null)} /> ); })}
); }; const ProjectThumb = ({ id }) => ( {`Project ); const ProjectCard = ({ project, xPct, yPct, wPct, hovered, onEnter, onLeave }) => (
0{project.id} / 05 {project.side} · {project.tag}

{project.title}

{project.desc}

{project.tags.map((t, i) => ( {t} {i < project.tags.length - 1 && ·} ))}
view on github
); const Projects = () => { const [activeId, setActiveId] = React.useState(null); return (
03
projects
five threads

Half logic. Half feels.

Five projects, sketched as connections from one mind. Hover any thread to follow the wire.

); }; // ===== SKILLS ===== const SKILL_GROUPS = [ { label: 'Frontend', items: [ ['HTML', 5], ['CSS', 5], ['JavaScript', 5], ['React', 4], ['Vite', 4], ['TypeScript', 4] ]}, { label: 'Backend', items: [ ['Node.js', 5], ['REST APIs', 5], ['Python', 5], ['SQL', 5], ['MySQL', 5], ['Django', 5] ]}, { label: 'Tools', items: [ ['Git / GitHub', 5], ['VS Code', 5], ['Docker', 5], ['VPS hosting', 5], ['Linux / SSH', 5], ['MySQL Workbench', 5], ['Tailscale', 5] ]}, { label: 'Learning', learning: true, items: [ ['Max security VPS', 'learning'], ['Linux server & SSH', 'learning'], ['3D Design', 'learning'], ['Python & SQL depth', 'learning'], ['Data science / ML', 'learning'], ['3D Animation', 'soon'] ]}, ]; const Skills = () => (
04
skills
tools, honestly rated

What I work with.

Dots are confidence, not years. wip means I'm still learning out loud.

{SKILL_GROUPS.map(g => (

{g.label} {g.items.length}

    {g.items.map(([name, level]) => (
  • {name} {typeof level === 'number' ? ( {[...Array(5)].map((_, i) => ( ))} ) : ( {level} )}
  • ))}
))}
); // ===== JOURNEY ===== const STOPS = [ { year: '2022', title: 'Specialized Studies', detail: 'Full-stack development and project management fundamentals.' }, { year: '2024', title: "Bachelor's Degree", detail: 'Applied Computer Science at Mundiapolis University — thesis on AI integration in commerce.' }, { year: '2025', title: 'Full-Stack Developer', detail: 'Built and maintained client websites, backend API features, and database apps at Creativity E-Marketing.' }, { year: '2025', title: 'Robotics Trainer', detail: 'Taught robotics, electronics, sensors, and beginner programming at Coin Etudiant.' }, { year: '2026', title: 'Building ChioOS', detail: 'Building a private full-stack Life OS while improving Docker, VPS, Linux, SSH, and project architecture.', state: 'now' }, { year: '2026', title: 'Junior dev role', detail: 'Targeting junior full-stack, backend, application support, technical support, freelance, and collaboration.', state: 'next' }, ]; const Journey = () => (
05
journey
career & milestones

A timeline of milestones.

From specialized studies to real products, one step at a time.

{STOPS.map((s, i) => (
{s.year}

{s.title}

{s.detail}

))}
); const Contact = () => (
06
contact
say hi

If you'd like to talk, I'd like to listen.

Job leads, project ideas, book recs, weird questions — all welcome.

7lawless25@gmail.com
GitHub @SevenLawless LinkedIn /in/zakaria-zaoui-9a7836334 CV Download résumé ↓
made by hand · Zakaria Zaoui · 2026 · v0.1.0 ↑ back to top
); window.PortfolioApp = { Hero, About, Projects, Skills, Journey, Contact };