import React, { useState, useEffect, useRef } from "react";
import {
Github, Linkedin, Facebook, Twitter, Mail, Phone, MapPin,
ArrowUpRight, ArrowUp, Moon, Sun, Menu, X, Sparkles, Code2, Server,
Cloud, Database, Wrench, Cpu, Search, Send, GraduationCap, Award,
ChevronDown, Bot, Building2, TrendingUp, Rocket, Landmark, ExternalLink,
Briefcase, Headphones, Users
} from "lucide-react";
/* ------------------------------------------------------------------ */
/* Jiwan Pokhrel — portfolio (light-first) */
/* Display: Space Grotesk · Body: Inter · Mono: JetBrains Mono */
/* Accent: violet #7C5CFF → teal #14B8A6 */
/* ------------------------------------------------------------------ */
const FONTS =
"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap";
const THEMES = {
light: {
bg: "#F6F7FB", bgSoft: "#FFFFFF", text: "#111327", sub: "#535A72",
glass: "rgba(255,255,255,0.72)", glassBorder: "rgba(17,19,39,0.09)",
navBg: "rgba(246,247,251,0.8)", chip: "rgba(17,19,39,0.05)",
shadow: "0 22px 55px rgba(17,19,39,0.12)", blobOp: 0.4,
},
dark: {
bg: "#070B14", bgSoft: "#0B1120", text: "#E8EAF2", sub: "#9AA3B8",
glass: "rgba(255,255,255,0.045)", glassBorder: "rgba(255,255,255,0.09)",
navBg: "rgba(7,11,20,0.72)", chip: "rgba(255,255,255,0.06)",
shadow: "0 20px 60px rgba(0,0,0,0.45)", blobOp: 0.55,
},
};
const ACCENT_A = "#7C5CFF";
const ACCENT_B = "#14B8A6";
const GRAD = `linear-gradient(100deg, ${ACCENT_A}, ${ACCENT_B})`;
/* ----------------------------- data ------------------------------- */
const CONTACT = {
name: "Jiwan Pokhrel",
emails: ["jiwanpokhrel143@gmail.com", "info@techolation.com"],
phones: [
{ label: "+61 0406 688 975 (AU)", tel: "+610406688975" },
{ label: "+977 984 674 2075 (NP)", tel: "+9779846742075" },
],
address: "Manly Vale, Sydney NSW 2093, Australia",
socials: [
{ icon: Linkedin, href: "https://www.linkedin.com/in/jiwan-pokh/", label: "LinkedIn" },
{ icon: Github, href: "https://github.com/jiwanpokh", label: "GitHub" },
{ icon: Facebook, href: "https://www.facebook.com/jiwan.pokh/", label: "Facebook" },
{ icon: Twitter, href: "https://x.com/jiwanpokh", label: "X (Twitter)" },
],
};
const TYPED_ROLES = [
"Software Developer", "Laravel Developer", "React Developer",
"AI Solutions Developer", "IT Support Engineer", "SEO Executive", "Problem Solver",
];
const SUMMARY =
"Software developer with 3+ years of hands-on experience building production web applications with object-oriented programming, REST APIs, SQL databases and Git — complemented by ongoing IT support experience across Microsoft Azure and Office 365. Comfortable across the full SDLC in Agile teams, with a strong OOP and MVC foundation that transfers to modern frameworks, and an enthusiast of AI-assisted development to accelerate coding, testing and documentation.";
const STATS = [
{ value: 3, suffix: "+", label: "Years production experience" },
{ value: 4, suffix: "", label: "Companies across AU, US & NP" },
{ value: 3, suffix: "", label: "Live products shipped" },
{ value: 20, suffix: "+", label: "Technologies used" },
];
const SKILLS = [
{ cat: "Core Development", icon: Code2, items: ["OOP", "MVC & Design Patterns", "REST APIs", "SDLC", "Agile / Scrum", "JIRA"] },
{ cat: "Languages & Frameworks", icon: Server, items: ["PHP (Laravel)", "JavaScript", "React", "Vue.js", "C / C++", "Java", "HTML5 / CSS3", "Bootstrap", "Tailwind", "jQuery"] },
{ cat: "Databases", icon: Database, items: ["MySQL", "Oracle Database", "SQL Server", "Relational DB design"] },
{ cat: "Cloud & IT", icon: Cloud, items: ["Microsoft Azure", "Office 365", "Active Directory", "VMware / Hyper-V", "Network Administration"] },
{ cat: "Version Control & Tools", icon: Wrench, items: ["Git / GitHub", "VS Code", "cPanel", "GitHub Copilot", "Claude"] },
{ cat: "SEO & Analytics", icon: Search, items: ["Google Analytics", "Search Console", "SEMrush", "Ahrefs", "AdWords"] },
];
const PROJECTS = [
{
title: "AI Receptionist",
cat: "AI",
icon: Bot,
status: "In development · 2026",
blurb: "AI-powered phone answering system integrating Twilio for call handling with an LLM for natural conversation — automatically takes customer orders and answers FAQs in real time.",
stack: ["Twilio", "LLM", "Laravel", "Voice AI"],
link: null,
},
{
title: "Investnestly",
cat: "Web",
icon: TrendingUp,
status: "Live",
blurb: "Investment syndicate platform for collecting monthly investor contributions, tracking project profit & loss, and managing multiple concurrent projects and new concept submissions. Multi-role investor/admin login with OAuth-based authentication.",
stack: ["Laravel", "OAuth", "MySQL", "Multi-role Auth"],
link: "https://investnestly.com",
},
{
title: "Topifyglobe",
cat: "Web",
icon: Rocket,
status: "Live",
blurb: "Vite + React web application deployed to cPanel hosting with a custom GitHub-webhook CI/CD pipeline that builds and deploys automatically on every push.",
stack: ["Vite", "React", "CI/CD", "cPanel"],
link: "https://topifyglobe.com",
},
{
title: "Ward Office Web App",
cat: "Web",
icon: Landmark,
status: "Delivered",
blurb: "Laravel-based web application built for a local ward office in Pokhara, alongside responsive websites for local organisations — with accessibility and cross-browser improvements.",
stack: ["Laravel", "Bootstrap", "Accessibility"],
link: null,
},
];
const EXPERIENCE = [
{
role: "Website Developer & Administrator",
org: "Totteri LLC — Texas, USA (Remote)",
period: "May 2024 – Present",
icon: Briefcase,
points: [
"Develop and maintain multiple Laravel, WordPress and Drupal web applications, including database design and REST API integrations with backend services.",
"Build UI pages with Vue.js, HTML5, CSS3, JavaScript and Bootstrap; created admin tools that streamline content add/update/delete workflows.",
"Manage content migration and SEO/metadata optimisation for global client websites; migrate and maintain Laravel apps on cPanel with QA and deployment support.",
],
stack: ["Laravel", "Vue.js", "WordPress", "Drupal", "REST APIs"],
},
{
role: "IT Support (Part-Time)",
org: "Ricoh — Sydney, Australia",
period: "Mar 2023 – Present",
icon: Headphones,
points: [
"Provide technical support for Office 365, Active Directory and Azure cloud services — deployment, monitoring and troubleshooting.",
"Resolve end-user tickets and hardware/software issues across desktops, laptops and mobile devices via ticketing systems.",
"Support network administration (router/switch config), VMware/Hyper-V virtualisation, backup & disaster recovery, and system security audits.",
],
stack: ["Azure", "Office 365", "Active Directory", "VMware"],
},
{
role: "Web Developer & SEO Executive",
org: "Swayanj Solution — Kathmandu, Nepal",
period: "Feb 2021 – Apr 2022",
icon: Search,
points: [
"Developed and maintained responsive websites with HTML, CSS, JavaScript and PHP; built an internal reporting web app for weekly departmental performance reports.",
"Customised WordPress themes and plugins; managed Google Analytics/AdWords campaigns to grow traffic and conversions.",
"Ran keyword research and on/off-page SEO, monitored performance via SEMrush and built quality backlinks.",
],
stack: ["PHP", "WordPress", "SEO", "Google Analytics"],
},
{
role: "Web Developer Intern",
org: "CodeSastra Pvt. Ltd. — Pokhara, Nepal",
period: "Sep 2017 – Oct 2020",
icon: Code2,
points: [
"Built responsive websites for local organisations using WordPress, Bootstrap, HTML, CSS and JavaScript, plus a Laravel web app for a local ward office.",
"Assisted senior developers with coding, testing and debugging; contributed to UAT, accessibility improvements and cross-browser compatibility.",
],
stack: ["WordPress", "Laravel", "Bootstrap"],
},
{
role: "Customer Service Representative",
org: "Woolworths, Warringah Mall · Valentine Woodfire Pizzeria, Narrabeen",
period: "Dec 2022 – May 2023",
icon: Users,
points: [
"Delivered frontline customer service, resolved complaints and managed high volumes of phone, email and in-person enquiries.",
],
stack: ["Communication", "Customer Service"],
},
];
const EDUCATION = [
{
title: "Bachelor of Software Engineering — 2019, Nepal",
org: "Coursework: Data Structures & Algorithms, DBMS, OOP & UML Design, Software Testing & QA, Cloud Computing, Enterprise Application Development.",
extra: "Capstone: led a 3-person team building a student enrollment web app with online payment and admin document verification.",
icon: GraduationCap,
},
{
title: "Core Strengths",
org: "Teamwork & collaboration across cross-functional, cross-cultural teams · Problem-solving with practical, efficient solutions · Leadership & clear communication with technical and non-technical stakeholders.",
extra: null,
icon: Award,
},
];
const NAV = ["About", "Skills", "Experience", "Projects", "Contact"];
/* Formspree — submissions are emailed to you and stored in your
Formspree dashboard (https://formspree.io/forms). */
const FORMSPREE_URL = "https://formspree.io/f/mykryrov";
/* ----------------------------- hooks ------------------------------- */
function useTyping(words, speed = 70, pause = 1600) {
const [text, setText] = useState("");
const [i, setI] = useState(0);
const [del, setDel] = useState(false);
useEffect(() => {
const word = words[i % words.length];
let t;
if (!del && text === word) t = setTimeout(() => setDel(true), pause);
else if (del && text === "") { setDel(false); setI(v => v + 1); }
else t = setTimeout(() => {
setText(word.slice(0, text.length + (del ? -1 : 1)));
}, del ? speed / 2 : speed);
return () => clearTimeout(t);
}, [text, del, i, words, speed, pause]);
return text;
}
function useReveal() {
useEffect(() => {
const io = new IntersectionObserver(
es => es.forEach(e => e.isIntersecting && e.target.classList.add("in")),
{ threshold: 0.1 }
);
document.querySelectorAll(".rv").forEach(el => io.observe(el));
return () => io.disconnect();
}, []);
}
function useScrollSpy(ids) {
const [active, setActive] = useState("");
useEffect(() => {
const io = new IntersectionObserver(
es => es.forEach(e => e.isIntersecting && setActive(e.target.id)),
{ rootMargin: "-40% 0px -55% 0px" }
);
ids.forEach(id => {
const el = document.getElementById(id);
if (el) io.observe(el);
});
return () => io.disconnect();
}, [ids]);
return active;
}
function Counter({ value, suffix }) {
const [n, setN] = useState(0);
const ref = useRef(null);
const started = useRef(false);
useEffect(() => {
const io = new IntersectionObserver(es => {
if (es[0].isIntersecting && !started.current) {
started.current = true;
const t0 = performance.now();
const tick = now => {
const p = Math.min((now - t0) / 1200, 1);
setN(Math.round(value * (1 - Math.pow(1 - p, 3))));
if (p < 1) requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
}
}, { threshold: 0.5 });
if (ref.current) io.observe(ref.current);
return () => io.disconnect();
}, [value]);
return {n}{suffix} ;
}
/* --------------------------- components --------------------------- */
/* 3D tilt wrapper — cards lean toward the cursor */
function Tilt({ children, max = 7, style }) {
const ref = useRef(null);
const onMove = e => {
const el = ref.current;
if (!el || window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
const r = el.getBoundingClientRect();
const x = (e.clientX - r.left) / r.width - 0.5;
const y = (e.clientY - r.top) / r.height - 0.5;
el.style.transform = `perspective(800px) rotateY(${x * max}deg) rotateX(${-y * max}deg) translateY(-4px)`;
el.style.setProperty("--mx", `${(x + 0.5) * 100}%`);
el.style.setProperty("--my", `${(y + 0.5) * 100}%`);
};
const onLeave = () => {
if (ref.current) ref.current.style.transform = "";
};
return (
{children}
);
}
/* Magnetic button — nudges toward the cursor */
function Magnetic({ children }) {
const ref = useRef(null);
const onMove = e => {
const el = ref.current;
if (!el || window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
const r = el.getBoundingClientRect();
const x = e.clientX - r.left - r.width / 2;
const y = e.clientY - r.top - r.height / 2;
el.style.transform = `translate(${x * 0.18}px, ${y * 0.18}px)`;
};
const onLeave = () => { if (ref.current) ref.current.style.transform = ""; };
return (
{children}
);
}
/* Cursor spotlight that follows the pointer across the whole page */
function Spotlight({ dark }) {
const ref = useRef(null);
useEffect(() => {
const move = e => {
if (ref.current)
ref.current.style.background = `radial-gradient(560px circle at ${e.clientX}px ${e.clientY}px, ${dark ? "rgba(124,92,255,0.10)" : "rgba(124,92,255,0.08)"}, transparent 70%)`;
};
window.addEventListener("pointermove", move);
return () => window.removeEventListener("pointermove", move);
}, [dark]);
return
;
}
function Aurora({ T }) {
const a = useRef(null), b = useRef(null), c = useRef(null);
useEffect(() => {
const move = e => {
const x = e.clientX / window.innerWidth - 0.5;
const y = e.clientY / window.innerHeight - 0.5;
if (a.current) a.current.style.transform = `translate(${x * 60}px, ${y * 60}px)`;
if (b.current) b.current.style.transform = `translate(${x * -45}px, ${y * -45}px)`;
if (c.current) c.current.style.transform = `translate(${x * 25}px, ${y * -25}px)`;
};
window.addEventListener("pointermove", move);
return () => window.removeEventListener("pointermove", move);
}, []);
return (
);
}
function Eyebrow({ children }) {
return (
{children}
);
}
function H2({ children, T }) {
return (
{children}
);
}
function Card({ children, T, style, glow = true }) {
return (
{children}
);
}
/* ------------------------------ app ------------------------------- */
export default function App() {
const [dark, setDark] = useState(false); // light mode first
const [menu, setMenu] = useState(false);
const [filter, setFilter] = useState("All");
const [form, setForm] = useState({ name: "", email: "", msg: "" });
const [status, setStatus] = useState("idle"); // idle | sending | sent | error
const T = dark ? THEMES.dark : THEMES.light;
const typed = useTyping(TYPED_ROLES);
const active = useScrollSpy(NAV.map(n => n.toLowerCase()));
useReveal();
useEffect(() => {
if (!document.getElementById("gf")) {
const l = document.createElement("link");
l.id = "gf"; l.rel = "stylesheet"; l.href = FONTS;
document.head.appendChild(l);
}
}, []);
const go = id => {
setMenu(false);
document.getElementById(id)?.scrollIntoView({ behavior: "smooth" });
};
const cats = ["All", "AI", "Web"];
const shown = PROJECTS.filter(p => filter === "All" || p.cat === filter);
const submitForm = async () => {
if (!form.name || !form.email || !form.msg || status === "sending") return;
setStatus("sending");
try {
const res = await fetch(FORMSPREE_URL, {
method: "POST",
headers: { "Content-Type": "application/json", Accept: "application/json" },
body: JSON.stringify({
name: form.name,
email: form.email,
message: form.msg,
_subject: `Portfolio enquiry from ${form.name}`,
}),
});
if (res.ok) {
setStatus("sent");
setForm({ name: "", email: "", msg: "" });
} else {
setStatus("error");
}
} catch {
setStatus("error");
}
};
return (
{/* NAV */}
{/* HERO */}
~ manly vale, sydney · open to opportunities
Hi, I'm Jiwan Pokhrel .
> {typed}
{SUMMARY}
go("projects")}>View projects
go("contact")}>Hire me
{CONTACT.socials.map(s => (
))}
go("about")} aria-label="Scroll to about" style={{
background: "none", border: 0, color: T.sub, cursor: "pointer",
marginTop: 48, alignSelf: "flex-start", display: "flex", alignItems: "center", gap: 8,
font: "500 13px 'JetBrains Mono', monospace", animation: "floaty 3s ease-in-out infinite",
}}>
scroll
{/* ABOUT */}
about me
Building for the web, learning for the future.
I'm a software developer based in Sydney, working remotely with{" "}
Totteri LLC (Texas, USA) on Laravel,
WordPress and Drupal applications, while providing part-time IT support at{" "}
Ricoh across Azure, Office 365 and
Active Directory. Before Australia, I built websites and ran SEO campaigns in
Nepal — from an internship in Pokhara to an SEO executive role in Kathmandu.
I'm comfortable across the full software development lifecycle in Agile teams,
and genuinely enthusiastic about AI-assisted development — I use tools like
GitHub Copilot and Claude daily to move faster on coding, testing and
documentation. My goal: keep learning and grow into a SaaS engineering team.
{STATS.map(s => (
{s.label}
))}
{/* SKILLS */}
technical skills
What my toolbox includes
A strong OOP and MVC foundation, production frameworks, and the cloud & IT
skills to keep everything running — plus the SEO know-how to make it visible.
{SKILLS.map(g => (
{g.cat}
{g.items.map(i => {i} )}
))}
{/* EXPERIENCE */}
experience
Where I've worked
{EXPERIENCE.map(e => (
))}
{EDUCATION.map(e => (
{e.title}
{e.org}
{e.extra &&
→ {e.extra}
}
))}
{/* PROJECTS */}
key projects
Things I've shipped (and am shipping)
{cats.map(c => (
setFilter(c)} style={{
padding: "9px 18px", fontSize: 13.5,
background: filter === c ? GRAD : T.chip,
color: filter === c ? "#fff" : T.sub,
border: `1px solid ${filter === c ? "transparent" : T.glassBorder}`,
}}>{c}
))}
{shown.map(p => (
{p.title}
{p.status}
{p.blurb}
{p.stack.map(s => {s} )}
{p.link && (
Visit site
)}
))}
{/* CONTACT */}
{/* FOOTER */}
Jiwan Pokhrel
© {new Date().getFullYear()} · Built with React & a lot of coffee
{CONTACT.socials.map(s => (
))}
window.scrollTo({ top: 0, behavior: "smooth" })}>
);
}