import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell"> </div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer /> description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`, />
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}
/>
<Projects items={projects} />
<Stack groups={tech} />
<About location={site.location} />
<Contact email={site.email} />
</main>
<Footer />
</div>
);
}
function Hero({ title, tagline }: HeroProps) {
return (
<section className="relative min-h-[100svh]">
<h1 className="display">{title}</h1>
<p className="muted">{tagline}</p>
{/* Laravel · Next.js · FastAPI · Flutter */}
</section>
);
}
const projects = [
{ name: "TorobShop", stack: ["Laravel"] },
{ name: "TorobMall", stack: ["Laravel"] },
{ name: "PayTorobShop", stack: ["Laravel"] },
{ name: "PatiBal", stack: ["Laravel", "Next.js"] },
{ name: "Zarnia", stack: ["Laravel", "Next.js"] },
{ name: "Roominest", stack: ["Laravel", "BBB"] },
{ name: "Nerkhoone", stack: ["Python", "Flask"] },
{ name: "Jibeto", stack: ["Flutter", "Laravel"] },
];
async function getRates(): Promise<RateBoard> {
const res = await fetch("/api/rates", { next: { revalidate: 30 } });
if (!res.ok) throw new Error("rate_board_unavailable");
return res.json();
}
export async function POST(req: Request) {
const body = await req.json();
const order = await Order::create({
user_id: auth()->id(),
payload: body,
status: "pending",
});
return Response.json({ id: order.id }, { status: 201 });
}
:root {
--bg: #050505;
--ink: #f9f3e3;
--accent: #d83a2c;
--glow: rgba(216, 58, 44, 0.28);
}
.atmosphere {
background:
radial-gradient(ellipse at 50% -8%, rgba(216, 58, 44, 0.22), transparent),
linear-gradient(180deg, #050505, #0a0808);
}
.btn-primary {
background: var(--accent);
box-shadow: 0 0 24px var(--glow);
}
import type { Metadata } from "next";
import { IBM_Plex_Mono, Sora, Syne } from "next/font/google";
import { site, projects, tech } from "@/data/content";
export const metadata: Metadata = {
title: `${site.name} — ${site.title}`,
description: site.tagline,
metadataBase: new URL(site.portfolio),
};
export default function Home() {
return (
<div className="site-shell">
<div className="atmosphere" aria-hidden />
<Header brand={site.brand} />
<main>
<Hero
title={site.title}
tagline={site.tagline}
cta={["View projects", "Contact"]}