initial commit

This commit is contained in:
Aidan 2025-07-02 20:05:23 -04:00
commit 0f94d1300e
18 changed files with 947 additions and 0 deletions

85
app/about/page.tsx Normal file
View file

@ -0,0 +1,85 @@
import { Nav } from "@/components/core/nav";
import { GiStoneWheel } from "react-icons/gi";
import { TbUserSquareRounded } from "react-icons/tb";
import { RiTelegram2Line } from "react-icons/ri";
export default function About() {
return (
<main>
<Nav />
<div className="flex flex-col items-center justify-between gap-3 my-20">
<div className="flex flex-row items-center justify-between gap-2">
<TbUserSquareRounded size={36} />
<h1 className="text-4xl font-bold">
About
</h1>
</div>
</div>
<div className="flex flex-col items-center justify-between gap-3">
<h2 className="text-2xl font-semibold text-center w-full flex flex-wrap items-center justify-center">
p0ntus is a small team of developers working towards
<span className="bg-red-400 text-white rounded-full italic ml-2 px-3 pr-4 py-1">one goal</span>.
</h2>
<h2 className="text-xl text-center w-full flex flex-wrap items-center justify-center">
we want to make the cloud accessible to <span className="ml-1 italic">everyone</span>.
</h2>
<h2 className="text-lg text-center w-full flex flex-wrap items-center justify-center">
no corporate sponsors, no closed source, no microtransactions.
</h2>
</div>
<div className="flex flex-col items-center justify-between gap-3 my-20">
<div className="flex flex-col items-center justify-between gap-3">
<GiStoneWheel size={60} />
<h2 className="text-3xl font-semibold text-center w-full flex flex-wrap items-center justify-center">
we don&apos;t reinvent the wheel,
</h2>
<h2 className="text-2xl text-center w-full flex flex-wrap items-center justify-center">
but we get the job done.
</h2>
</div>
<div className="flex flex-col items-center justify-between gap-3 my-2 max-w-3xl">
<p className="text-md text-center w-full flex flex-wrap items-center justify-center">
we put effort into finding, creating, and building on the best tools avaliable to bring the magic of the cloud to you.
</p>
<p className="text-md text-center w-full flex flex-wrap items-center justify-center">
we believe using cloud services is <span className="ml-1 italic">more than just a way to store your data.</span>
<span className="font-bold">your experience should be valued.</span>
</p>
</div>
</div>
<div className="flex flex-col items-center justify-between gap-3 my-20">
<div className="flex flex-col items-center justify-between gap-3">
<RiTelegram2Line size={60} />
<h2 className="text-3xl font-semibold text-center w-full flex flex-wrap items-center justify-center">
let&apos;s talk.
</h2>
<div className="flex flex-col items-center justify-between gap-2">
<p className="text-md text-center w-full flex flex-wrap items-center justify-center">
we&apos;re always looking for new people to help out.
</p>
<p className="text-md text-center w-full flex flex-wrap items-center justify-center">
we&apos;re here for everything else, too! account support, deployment, service, and more.
</p>
<p className="text-md text-center w-full flex flex-wrap items-center justify-center">
join us on telegram for support, questions, chatting, and more.
</p>
</div>
<div className="flex flex-row items-center justify-center gap-4 my-3">
<button className="flex flex-row items-center justify-center gap-2 bg-blue-500 text-white px-4 py-2 rounded-md">
<RiTelegram2Line size={24} />
<span className="text-md">
contact
</span>
</button>
<button className="flex flex-row items-center justify-center gap-2 bg-blue-500 text-white px-4 py-2 rounded-md">
<RiTelegram2Line size={24} />
<span className="text-md">
join group
</span>
</button>
</div>
</div>
</div>
</main>
);
}

26
app/globals.css Normal file
View file

@ -0,0 +1,26 @@
@import "tailwindcss";
:root {
--background: #ffffff;
--foreground: #171717;
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
}
}
body {
background: var(--background);
color: var(--foreground);
font-family: var(--font-geist-sans);
}

34
app/layout.tsx Normal file
View file

@ -0,0 +1,34 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "p0ntus",
description: "p0ntus is a free and open set of services for the public",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
{children}
</body>
</html>
);
}

94
app/page.tsx Normal file
View file

@ -0,0 +1,94 @@
import Link from "next/link";
import { SiForgejo, SiJellyfin, SiOllama } from "react-icons/si";
import { TbMail, TbKey, TbServer, TbArrowRight } from "react-icons/tb";
import { Nav } from "@/components/core/nav";
export default function Home() {
return (
<main>
<Nav />
<div className="flex flex-col items-center justify-between gap-3 my-20">
<h1 className="text-4xl font-bold">
p0ntus
</h1>
<h3 className="text-2xl">
open source at your fingertips
</h3>
</div>
<hr className="border-black mt-24 mb-24" />
<div className="max-w-6xl mx-auto w-full px-4 md:px-10">
<div className="grid grid-cols-1 md:grid-cols-3 gap-x-38 gap-y-16">
<div className="flex flex-col items-center justify-start gap-6 h-full">
<h2 className="text-3xl font-bold text-center w-full whitespace-nowrap">Services</h2>
<h3 className="text-xl italic text-center w-full">what can we offer you?</h3>
<div className="grid grid-cols-3 gap-10 my-8">
<div className="flex flex-col items-center justify-center gap-3">
<Link href="/services/git" className="flex flex-col items-center gap-2">
<SiForgejo size={50} />
<h3 className="text-lg font-bold">git</h3>
</Link>
</div>
<div className="flex flex-col items-center justify-center gap-3">
<Link href="/services/mail" className="flex flex-col items-center gap-2">
<TbMail size={50} />
<h3 className="text-lg font-bold">mail</h3>
</Link>
</div>
<div className="flex flex-col items-center justify-center gap-3">
<Link href="/services/ai" className="flex flex-col items-center gap-2">
<SiOllama size={50} />
<h3 className="text-lg font-bold">ai</h3>
</Link>
</div>
<div className="flex flex-col items-center justify-center gap-3">
<Link href="/services/tv" className="flex flex-col items-center gap-2">
<SiJellyfin size={50} />
<h3 className="text-lg font-bold">tv</h3>
</Link>
</div>
<div className="flex flex-col items-center justify-center gap-3">
<Link href="/services/keybox" className="flex flex-col items-center gap-2">
<TbKey size={50} />
<h3 className="text-lg font-bold">keybox</h3>
</Link>
</div>
<div className="flex flex-col items-center justify-center gap-3">
<Link href="/services/keybox" className="flex flex-col items-center gap-2">
<TbServer size={50} />
<h3 className="text-lg font-bold">hosting</h3>
</Link>
</div>
</div>
</div>
<div className="flex flex-col items-center justify-start gap-6 h-full">
<h2 className="text-3xl font-bold text-center w-full whitespace-nowrap">Where we are</h2>
<h3 className="text-xl italic text-center w-full">how can you find us?</h3>
<div className="flex flex-col items-center gap-6 mt-6">
<p className="text-lg text-center">
p0ntus is fully on the public internet! our servers are mainly located in the united states.
</p>
<p className="text-lg text-center">
we also operate servers in the united states, canada and germany.
</p>
<Link href="/servers" className="flex flex-row items-center gap-2 text-lg text-center text-blue-500 hover:underline">
our servers <TbArrowRight size={20} />
</Link>
</div>
</div>
<div className="flex flex-col items-center justify-start gap-6 h-full">
<h2 className="text-3xl font-bold text-center w-full whitespace-nowrap">Why is p0ntus free?</h2>
<h3 className="text-xl italic text-center w-full">what&apos;s the point?</h3>
<div className="flex flex-col items-center gap-6 mt-6">
<p className="text-lg text-center">
everything today includes microtransactions, and we were fed up with it.
</p>
<p className="text-lg text-center">
p0ntus exists to show that it is possible to have a free and open set of services that people have fun using.
</p>
</div>
</div>
</div>
</div>
</main>
);
}

130
app/servers/page.tsx Normal file
View file

@ -0,0 +1,130 @@
import { Nav } from "@/components/core/nav";
import { TbServer } from "react-icons/tb";
import Flag from 'react-world-flags';
export default function Servers() {
return (
<main>
<Nav />
<div className="flex flex-col items-center justify-between gap-3 my-20">
<div className="flex flex-row items-center justify-between gap-2">
<TbServer size={36} />
<h1 className="text-4xl font-bold">
servers and infrastructure
</h1>
</div>
</div>
<div className="flex flex-col items-center justify-between gap-3 my-20">
<h2 className="text-2xl font-semibold text-center w-full flex flex-wrap items-center justify-center">
where we host out of
</h2>
<div className="grid grid-cols-3 gap-4 my-4">
<p className="flex flex-row items-center justify-between gap-2 text-lg bg-blue-400 text-white px-4 py-2 rounded-full">
<Flag code="US" className="w-6 h-6" /> usa
</p>
<p className="flex flex-row items-center justify-between gap-2 text-lg bg-red-400 text-white px-4 py-2 rounded-full">
<Flag code="CA" className="w-6 h-6" /> canada
</p>
<p className="flex flex-row items-center justify-between gap-2 text-lg bg-orange-400 text-white px-4 py-2 rounded-full">
<Flag code="DE" className="mr-4 w-6 h-6" /> germany
</p>
</div>
</div>
<div className="flex flex-col items-center justify-between gap-3">
<h2 className="text-2xl font-semibold text-center w-full flex flex-wrap items-center justify-center">
hardware
</h2>
<div className="grid grid-cols-3 gap-4 my-4 w-5xl">
<div className="flex flex-col gap-2 text-lg bg-blue-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<TbServer size={36} />
<span className="text-2xl font-bold">
NY-1
</span>
</div>
<p className="flex flex-col text-sm my-2 gap-4">
<span><span className="font-bold">CPU:</span> 2x Intel Xeon E5-2699 v4 @ 3.60 GHz</span>
<span><span className="font-bold">RAM:</span> 256GB (8x Samsung 32GB DDR4)</span>
<span><span className="font-bold">Boot Drive:</span> Samsung Evo 850 250GB</span>
<span><span className="font-bold">Storage:</span> HP FX900 Pro 4TB NVMe</span>
<span><span className="font-bold">Bandwidth:</span> 40TB</span>
<span><span className="font-bold">Location:</span> Buffalo, New York, USA</span>
<span><span className="font-bold">Provider:</span> ColoCrossing</span>
</p>
</div>
<div className="flex flex-col gap-2 text-lg bg-red-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<TbServer size={36} />
<span className="text-2xl font-bold">
CA-1
</span>
</div>
<p className="flex flex-col text-sm my-2 gap-4">
<span><span className="font-bold">CPU:</span> 2 cores shared</span>
<span><span className="font-bold">RAM:</span> 2GB</span>
<span><span className="font-bold">Disk:</span> 3.5TB Raidz2</span>
<span><span className="font-bold">Storage:</span> HP FX900 Pro 4TB NVMe</span>
<span><span className="font-bold">Bandwidth:</span> Unlimited @ 250Mbps</span>
<span><span className="font-bold">Location:</span> Montreal, Canada</span>
<span><span className="font-bold">Provider:</span> Serverica</span>
</p>
</div>
<div className="flex flex-col gap-2 text-lg bg-orange-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<TbServer size={36} />
<span className="text-2xl font-bold">
DE-1
</span>
</div>
<p className="flex flex-col text-sm my-2 gap-4">
<span><span className="font-bold">CPU:</span> 1vCPU AMD EPYC</span>
<span><span className="font-bold">RAM:</span> 1GB</span>
<span><span className="font-bold">Storage:</span> 153GB</span>
<span><span className="font-bold">Location:</span> Frankfurt, Germany</span>
<span><span className="font-bold">Bandwidth:</span> Unlimited</span>
<span><span className="font-bold">Provider:</span> Oracle Cloud</span>
</p>
</div>
<div className="flex flex-col gap-2 text-lg bg-orange-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<TbServer size={36} />
<span className="text-2xl font-bold">
DE-2
</span>
</div>
<p className="flex flex-col text-sm my-2 gap-4">
<span><span className="font-bold">CPU:</span> 1vCPU AMD EPYC</span>
<span><span className="font-bold">RAM:</span> 1GB</span>
<span><span className="font-bold">Storage:</span> 47GB</span>
<span><span className="font-bold">Location:</span> Frankfurt, Germany</span>
<span><span className="font-bold">Bandwidth:</span> Unlimited</span>
<span><span className="font-bold">Provider:</span> Oracle Cloud</span>
</p>
</div>
</div>
<div className="flex flex-col items-center justify-between gap-3 my-20">
<h2 className="text-2xl font-semibold text-center w-full flex flex-wrap items-center justify-center">
our ip addresses
</h2>
<p className="text-center text-md my-2">
if you own a mail server/service, please consider whitelisting our ip addresses.
</p>
<div className="grid grid-cols-3 gap-4 my-4">
<p className="flex flex-row items-center gap-2 text-lg bg-blue-400 text-white px-4 py-2 rounded-full">
<Flag code="US" className="w-6 h-6" /> <span className="font-bold">NY1:</span> 192.3.178.206
</p>
<p className="flex flex-row items-center gap-2 text-lg bg-red-400 text-white px-4 py-2 rounded-full">
<Flag code="CA" className="w-6 h-6" /> <span className="font-bold">CA1:</span> 209.209.9.109
</p>
<p className="flex flex-row items-center gap-2 text-lg bg-orange-400 text-white px-4 py-2 rounded-full">
<Flag code="DE" className="w-6 h-6" /> <span className="font-bold">DE1:</span> 138.2.154.209
</p>
<p className="flex flex-row items-center gap-2 text-lg bg-orange-400 text-white px-4 py-2 rounded-full">
<Flag code="DE" className="w-6 h-6" /> <span className="font-bold">DE2:</span> 158.180.60.92
</p>
</div>
</div>
</div>
</main>
);
}

View file

@ -0,0 +1,12 @@
"use client"
import { ServicesShell } from "@/components/front/services"
import { useParams } from "next/navigation"
export default function Service() {
const slug = useParams().slug
return (
<ServicesShell slug={slug as string} />
)
}

87
app/services/page.tsx Normal file
View file

@ -0,0 +1,87 @@
import { Nav } from "@/components/core/nav"
import { SiForgejo, SiJellyfin, SiOllama } from "react-icons/si"
import { TbKey, TbMail, TbServer, TbTool } from "react-icons/tb"
import Link from "next/link"
export default function Services() {
return (
<main>
<Nav />
<div className="flex flex-col items-center justify-between gap-10 my-16">
<div className="flex flex-row items-center justify-between gap-2">
<TbTool size={36} />
<h1 className="text-4xl font-bold">
services
</h1>
</div>
<div className="flex flex-col items-center justify-between gap-2">
<h2 className="text-3xl font-light text-center w-full flex flex-wrap items-center justify-center">
please select a service.
</h2>
</div>
</div>
<div className="grid grid-cols-4 gap-4 my-4 w-3/4 mx-auto">
<Link href="/services/git">
<div className="flex flex-col gap-2 text-lg bg-blue-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<SiForgejo size={36} />
<span className="text-2xl font-bold">
git
</span>
</div>
</div>
</Link>
<Link href="/services/mail">
<div className="flex flex-col gap-2 text-lg bg-blue-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<TbMail size={36} />
<span className="text-2xl font-bold">
email
</span>
</div>
</div>
</Link>
<Link href="/services/ai">
<div className="flex flex-col gap-2 text-lg bg-blue-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<SiOllama size={36} />
<span className="text-2xl font-bold">
ai
</span>
</div>
</div>
</Link>
<Link href="/services/tv">
<div className="flex flex-col gap-2 text-lg bg-blue-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<SiJellyfin size={36} />
<span className="text-2xl font-bold">
tv
</span>
</div>
</div>
</Link>
<Link href="/services/keybox">
<div className="flex flex-col gap-2 text-lg bg-blue-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<TbKey size={36} />
<span className="text-2xl font-bold">
keybox
</span>
</div>
</div>
</Link>
<Link href="/services/hosting">
<div className="flex flex-col gap-2 text-lg bg-blue-400 text-white px-8 py-8 rounded-4xl">
<div className="flex flex-row items-center justify-between gap-2">
<TbServer size={36} />
<span className="text-2xl font-bold">
hosting
</span>
</div>
</div>
</Link>
</div>
</main>
)
}