Begin rewrite to astro

This commit is contained in:
Timothy Pidashev
2024-09-06 19:44:15 -07:00
parent 93d9b3e014
commit 9d7414e0c9
51 changed files with 3862 additions and 3561 deletions

0
.caddy/Caddyfile.release Normal file
View File

View File

@@ -1,5 +0,0 @@
timmypidashev.localhost {
encode gzip
reverse_proxy web:3000
}

View File

@@ -1,27 +0,0 @@
version: '3.8'
services:
caddy:
container_name: caddy
image: caddy:latest
ports:
- 80:80
- 443:443
volumes:
- ./caddyfile.dev:/etc/caddy/Caddyfile:rw
restart: always
networks:
- caddy
depends_on:
- web
web:
container_name: web
image: web:dev
networks:
- caddy
networks:
caddy:
name: caddy
external: true

0
compose.override.yml Normal file
View File

View File

@@ -1,14 +0,0 @@
version: '3.8'
services:
caddy:
container_name: caddy
image: caddy:latest
ports:
- 80:80
- 443:443
volumes:
- ./Caddyfile.prod:/etc/caddy/Caddyfile
restart: unless_stopped
networks:
- caddy

0
compose.yml Normal file
View File

View File

@@ -1,17 +0,0 @@
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
/coverage
/.next/
/out/
/build
.DS_Store
*.pem
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.env*.local
.vercel
*.tsbuildinfo
next-env.d.ts

View File

@@ -1,3 +0,0 @@
{
"extends": "next/core-web-vitals"
}

6
src/.stackblitzrc Normal file
View File

@@ -0,0 +1,6 @@
{
"startCommand": "npm start",
"env": {
"ENABLE_CJS_IMPORTS": true
}
}

View File

@@ -1,36 +1,11 @@
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
# Astro with Tailwind
## Getting Started
First, run the development server:
```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
```
npm init astro -- --template with-tailwindcss
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/with-tailwindcss)
You can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.
Astro comes with [Tailwind](https://tailwindcss.com) support out of the box. This example showcases how to style your Astro project with Tailwind.
This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
## Learn More
To learn more about Next.js, take a look at the following resources:
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
## Deploy on Vercel
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
For complete setup instructions, please see our [Styling Guide](https://docs.astro.build/guides/styling#-tailwind).

View File

@@ -1,20 +0,0 @@
import { getBlogBySlug, getAllBlogSlugs } from "@/lib/mdx";
export async function generateStaticParams() {
const slugs = await getAllBlogSlugs();
return slugs.map(({ slug }) => ({
slug,
}));
}
export default async function BlogPage({ params }) {
const blog = await getBlogBySlug(params.slug);
return (
<article className="py-16 prose">
<h1 className="text-light-foreground dark:text-dark-foreground">{blog.frontmatter.title}</h1>
<p className="text-light-yellow-1 dark:text-dark-yellow-1">{blog.frontmatter.author}</p>
<p className="text-light-blue-1 dark:text-dark-blue-1">{blog.frontmatter.date}</p>
<div>{blog.content}</div>
</article>
);
}

View File

@@ -1,32 +0,0 @@
import Link from "next/link";
import { getAllBlogSlugs, getBlogBySlug } from "@/lib/mdx";
export default async function BlogsPage() {
const slugs = await getAllBlogSlugs();
const blogs = await Promise.all(slugs.map(({ slug }) => getBlogBySlug(slug)));
return (
<section className="py-9">
{blogs.map((blog) => (
<article key={blog.slug} className="flex flex-col py-3">
<Link href={`/blog/${blog.slug}`}>
<div className="flex flex-col items-center pb-3 mb-3">
<h1 className="text-2xl font-bold mb-1">{blog.frontmatter.title}</h1>
<span className="text-light-yellow-1 dark:text-dark-yellow-1">{blog.frontmatter.description}</span>
<div className="text-lg text-gray-500">
{blog.frontmatter.tags && blog.frontmatter.tags.length > 0 && (
<>
<span className="mr-2 text-light-blue-1 dark:text-dark-blue-1">{blog.frontmatter.date}</span>
{blog.frontmatter.tags.map((tag, index) => (
<span key={index} className="mr-2 text-light-orange-1 dark:text-dark-orange-1">#{tag}</span>
))}
</>
)}
</div>
</div>
</Link>
</article>
))}
</section>
);
}

View File

@@ -1,104 +0,0 @@
---
title: "I corebooted my T440p, here's how I did it."
author: "Timothy Pidashev"
date: "2024/06/05"
description: "This is a sample MDX file."
tags: ["coreboot", "t440p", "dgpu"]
---
```python
# discord api
import discord
from discord.ext import commands
# custom utilities
from Utilities import log
log = log.Logger("errors")
class Errors(commands.Cog):
def __init__(self, client):
self.client = client
@commands.Cog.listener()
async def on_ready(self):
await log.info("Errors cog loaded.")
@commands.Cog.listener()
async def on_command_error(self, context, error):
if isinstance(error, commands.CheckFailure):
await context.reply(
"You are not priveleged enough to use this command.",
mention_author=False
)
else:
await context.reply(
f"**Error**\n```diff\n- {error}```",
mention_author=False
)
def setup(client):
client.add_cog(Errors(client))
```
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
*Italic Text*
_Italic Text_
**Bold Text**
__Bold Text__
* Bullet List
* Item 1
* Item 2
* Subitem 1
* Subitem 2
1. Numbered List
1. Item 1
2. Item 2
- Subitem 1
- Subitem 2
[Link Text](https://example.com)
![Image Alt Text](https://example.com/image.jpg)
> Blockquote
>
> Lorem ipsum dolor sit amet, consectetur adipiscing elit.
`Inline Code`
| Table Header 1 | Table Header 2 |
|----------------|----------------|
| Table Row 1 | Table Row 1 |
| Table Row 2 | Table Row 2 |
<sup>Superscript Text</sup>
<sub>Subscript Text</sub>
<mark>Highlighted Text</mark>
<ins>Underlined Text</ins>
<del>Strikethrough Text</del>
<abbr title="Abbreviation">Abbreviation</abbr>

View File

@@ -1,9 +0,0 @@
---
title: "My perfect development environment."
author: "Timothy Pidashev"
date: "2024/06/07"
description: "This is another sample mdx file."
tags: ["dwl", "wayland", "gruvbox"]
---
# FDSLKJFLKSFJL

View File

@@ -1,10 +0,0 @@
---
title: "The First Entry"
author: "Timothy Pidashev"
date: "06/14/2024"
description: "My first ever blog post!"
tags: ["first", "blog", "post"]
---
# The First Entry

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -1,34 +0,0 @@
// Imports
import "@/style/globals.css";
import Theme from "@/app/theme";
import Header from "@/components/header";
import Footer from "@/components/footer";
import Container from "@/components/ui/container";
// Metadata
export const metadata = {
title: "Timothy Pidashev",
description: "Engineering the Future!"
};
// Exports
export default function Layout({children}) {
return (
<html lang="en" suppressHydrationWarning>
<body className="
bg-light-background text-light-foreground
dark:bg-dark-background dark:text-dark-foreground
">
<Theme>
<Container>
<Header />
<main>
{children}
</main>
<Footer />
</Container >
</Theme>
</body>
</html>
);
}

View File

@@ -1,17 +0,0 @@
import React from 'react'
import Link from "next/link";
const Not_found = () => {
return (
<div className="fixed top-0 left-0 right-0 bottom-0 flex flex-col items-center justify-center">
<h1 className="lg:text-4xl md:text-3xl font-bold text-light-red-1 dark:text-dark-red-1">
Sorry, this page doesn't exist!
</h1>
<Link href="/" className="lg:text-4xl md:text-sm text-light-blue-1 dark:text-blue-1 hover:underline">
Go back to Home
</Link>
</div>
)
}
export default Not_found

View File

@@ -1,9 +0,0 @@
// Imports
import Hero from "@/components/hero";
// Exports
export default function Index() {
return (
<Hero />
);
}

View File

@@ -1,5 +0,0 @@
import PageTransition from "@/components/ui/transitions";
export default function rootTemplate({ children }) {
return <PageTransition>{children}</PageTransition>;
}

View File

@@ -1,12 +0,0 @@
"use client"
// Imports
import { ThemeProvider} from "next-themes";
export default function Theme({children}) {
return (
<ThemeProvider attribute="class">
{children}
</ThemeProvider>
)
}

7
src/astro.config.mjs Normal file
View File

@@ -0,0 +1,7 @@
import { defineConfig } from 'astro/config';
import tailwind from '@astrojs/tailwind';
// https://astro.build/config
export default defineConfig({
integrations: [tailwind()],
});

View File

@@ -1,67 +0,0 @@
"use client"
import Link from "next/link";
import { motion } from "framer-motion";
import ThemeToggle from "@/components/ui/theme-toggle";
const Items = [
{ id: 0, href: "https://add-later", label: "Contact", color: "green", component: false },
{ id: 1, href: "https://github.com/timmypidashev", label: "Github", color: "yellow", component: false },
{ id: 3, href: "https://linkedin.com/in/timothy-pidashev-9055922a7", label: "Linkedin", color: "blue", component: false },
{ id: 4, href: "https://instagram.com/timmypidashev", label: "Instagram", color: "purple", component: false },
{ id: 5, href: "https://github.com/timmypidashev/web", label: "Source", color: "aqua", component: false },
{ id: 6, color: "foreground", component: true },
];
const ItemColors = {
green: "text-light-green-1 dark:text-dark-green-1",
yellow: "text-light-yellow-1 dark:text-dark-yellow-1",
blue: "text-light-blue-1 dark:text-dark-blue-1",
purple: "text-light-purple-1 dark:text-dark-purple-1",
aqua: "text-light-aqua-1 dark:text-dark-aqua-1"
};
function Content() {
return (
<motion.nav
initial="hidden"
animate="visible"
variants={{
visible: {
transition: {
staggerChildren: 0.3
}
},
}}
className="
fixed bottom-0 left-0 w-full z-50
flex flex-row
px-6 py-1.5
font-bold text-2xl
justify-center
bg-light-background dark:bg-dark-background
">
<div className="flex space-x-10">
{Items.map((item) => (
<motion.div
key={item.id}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ delay: item.id * 0.2 }}
className={`
inline-block
${ItemColors[item.color]} dark:${ItemColors[item.color]}
`}>
{item.component ? (
<ThemeToggle />
) : (
<Link href={item.href} target="_blank" rel="noopener noreferrer">{item.label}</Link>
)}
</motion.div>
))}
</div>
</motion.nav>
);
}
export default Content;

View File

@@ -1,9 +0,0 @@
import Content from "@/components/footer/content";
function Footer() {
return (
<Content />
);
}
export default Footer;

View File

@@ -1,26 +0,0 @@
// Navigation links
export const Links = [
{ id: 0, href: "/", label: "Home", color: "green" },
{ id: 1, href: "/projects", label: "Projects", color: "yellow" },
{ id: 2, href: "/resume", label: "Resume", color: "blue" },
{ id: 3, href: "/blog", label: "Blog", color: "purple" },
{ id: 4, href: "/shop", label: "Shop", color: "aqua" }
];
// Drop down menu link colors
export const LinkColors = {
green: "text-light-green-1 dark:text-dark-green-1",
yellow: "text-light-yellow-1 dark:text-dark-yellow-1",
blue: "text-light-blue-1 dark:text-dark-blue-1",
purple: "text-light-purple-1 dark:text-dark-purple-1",
aqua: "text-light-aqua-1 dark:text-dark-aqua-1"
};
// Link underline selector colors
export const LinkUnderlineColors = {
green: "bg-light-green-1 dark:bg-dark-green-1",
yellow: "bg-light-yellow-1 dark:bg-dark-yellow-1",
blue: "bg-light-blue-1 dark:bg-dark-blue-1",
purple: "bg-light-purple-1 dark:bg-dark-purple-1",
aqua: "bg-light-aqua-1 dark:bg-dark-aqua-1"
};

View File

@@ -1,45 +0,0 @@
"use client"
import Link from "next/link";
import { motion } from "framer-motion";
import { Links, LinkColors } from "@/components/header/constants";
function DefaultHeader() {
return (
<motion.nav
initial="hidden"
animate="visible"
variants={{
visible: {
transition: {
staggerChildren: 0.3
}
},
}}
className="
fixed top-0 left-0 w-full z-50
hidden 2xl:flex xl:flex lg:flex md:flex flex-row
lg:px-6 md:px-5 sm:px-4 lg:py-1.5 md:py-1.5
lg:text-4xl md:text-3xl
font-bold justify-center
bg-light-background dark:bg-dark-background
">
<div className="flex lg:space-x-20 md:space-x-10">
{Links.map((link) => (
<motion.div
key={link.id}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ delay: link.id * 0.2 }}
className={`
inline-block
${LinkColors[link.color]} dark:${LinkColors[link.color]}
`}>
<Link href={link.href}>{link.label}</Link>
</motion.div>
))}
</div>
</motion.nav>
);
}
export default DefaultHeader;

View File

@@ -1,13 +0,0 @@
import Container from "@/components/ui/container";
import DefaultHeader from "@/components/header/default";
import Sidebar from "@/components/header/sidebar";
function Header() {
return (
<header className="hidden md:flex lg:text-4xl md:text-10xl">
<DefaultHeader />
</header>
);
}
export default Header;

View File

@@ -1,41 +0,0 @@
"use client"
import Link from "next/link";
import { motion } from "framer-motion";
import { Links, LinkColors } from "@/components/header/constants";
function Sidebar() {
return (
<div className="fixed top-0 left-0 h-screen w-45 flex justify-end transform -rotate-90 origin-top-left">
<motion.nav
initial="hidden"
animate="visible"
variants={{
visible: {
transiton: {
staggerChildren: 0.3
}
},
}}
className="
flex flex-col justify-center items-center transform -translate-x-full
">
<div className="flex space-x-10">
{Links.map((link) => (
<motion.div
key={link.id}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ delay: link.id * 0.2 }}
className={`
${LinkColors[link.color]} dark:${LinkColors[link.color]}
`}>
<Link href={link.href}>{link.label}</Link>
</motion.div>
))}
</div>
</motion.nav>
</div>
);
}
export default Sidebar;

View File

@@ -1,70 +0,0 @@
"use client"
import Typewriter from 'typewriter-effect';
import { motion } from 'framer-motion';
import React, { useState, useEffect } from 'react';
import Image from 'next/image';
function Portrait() {
const fadeInAnimation = {
hidden: { opacity: 0 },
visible: { opacity: 1, transition: { duration: 1 } },
};
return (
<motion.div
initial="hidden"
animate="visible"
variants={fadeInAnimation}
className="w-32 h-32 relative rounded-full overflow-hidden"
>
<Image
src="/profile.png"
alt="Portrait"
width="90"
height="90"
className="w-full h-full rounded-full"
/>
</motion.div>
);
}
function Content() {
return (
<>
<div className="flex justify-center items-center h-full font-bold text-4xl">
<div className="h-screen flex flex-col items-center justify-center">
<div className="flex items-center justify-center relative h-58 overflow-y-auto">
<Typewriter
options={{
autoStart: true,
loop: true,
delay: 50,
deleteSpeed: 800,
cursor: ''
}}
onInit={(typewriter) => {
typewriter.typeString("<center><span class='inline-block mb-4'>Hello, I'm</span><br><span class='inline-block mb-4'><strong class='text-light-aqua-1 dark:text-dark-aqua-1'>Timothy Pidashev</strong></span></center>")
.pauseFor(2500)
.deleteAll()
.start()
typewriter.typeString("<center><span class='inline-block mb-4'>I'm a <strong class='text-light-green-1 dark:text-dark-green-1'>19 year old</strong></span><br><span class='inline-block mb-4'>on an <strong class='text-light-yellow-1 dark:text-dark-yellow-1'>epic journey</strong> to</span><br><span class='inline-block mb-4'>become a <strong class='text-light-blue-1 dark:text-dark-blue-1'>software engineer</strong>!</span></center>")
.pauseFor(2500)
.deleteAll()
.start()
typewriter.typeString("<center><span class=''>Check out my <strong class='text-light-purple-1 dark:text-dark-purple-1'>blog</strong> and <strong class='text-light-aqua-1 dark:text-dark-aqua-1'>shop</strong></span><br></span><br><span class=''>or <strong class='text-light-green-1 dark:text-dark-green-1'>contact me below</strong>!</span></center>")
.pauseFor(2500)
.deleteAll()
.start()
}}
/>
</div>
</div>
</div>
</>
);
};
export default Content;

View File

@@ -1,12 +0,0 @@
"use client"
import React from 'react';
import Content from '@/components/hero/content';
function Hero() {
return (
<Content />
);
}
export default Hero;

View File

@@ -1,11 +0,0 @@
import React from "react";
const Container = ({ children }) => {
return (
<div className="mx-auto w-full max-w-5xl">
{children}
</div>
);
};
export default Container;

View File

@@ -1,35 +0,0 @@
"use client"
// Imports
import { FiSun, FiMoon } from "react-icons/fi"
import { useState, useEffect } from 'react'
import { useTheme } from 'next-themes'
import Image from "next/image"
export default function ThemeToggle() {
const [mounted, setMounted] = useState(false)
const { setTheme, resolvedTheme } = useTheme()
useEffect(() => setMounted(true), [])
if (!mounted) return (
<Image
src="data:image/svg+xml;base64,PHN2ZyBzdHJva2U9IiNGRkZGRkYiIGZpbGw9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMCIgdmlld0JveD0iMCAwIDI0IDI0IiBoZWlnaHQ9IjIwMHB4IiB3aWR0aD0iMjAwcHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB4PSIyIiB5PSIyIiBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjIiIHJ4PSIyIj48L3JlY3Q+PC9zdmc+Cg=="
width={16}
height={16}
sizes="16x16"
alt="Loading Light/Dark Toggle"
priority={false}
title="Loading Light/Dark Toggle"
style={{ opacity: 0 }}
/>
)
if (resolvedTheme === 'dark') {
return <FiSun onClick={() => setTheme('light')} />
}
if (resolvedTheme === 'light') {
return <FiMoon onClick={() => setTheme('dark')} />
}
}

View File

@@ -1,18 +0,0 @@
"use client"
import { motion } from "framer-motion";
const PageTransition = ({ children }) => (
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{
type: "tween",
duration: 0.5, // You can adjust the duration as needed
}}
>
{children}
</motion.div>
);
export default PageTransition;

View File

@@ -1,7 +0,0 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./*"]
}
}
}

View File

@@ -1,30 +0,0 @@
import fs from "fs";
import path from "path";
import { compileMDX } from "next-mdx-remote/rsc";
import rehypeHighlight from "rehype-highlight";
import remarkGfm from "remark-gfm";
const contentDir = path.join(process.cwd(), "app/blog/posts");
export async function getBlogBySlug(slug) {
const filePath = path.join(contentDir, `${slug}.mdx`);
const source = fs.readFileSync(filePath, "utf8");
const { frontmatter, content } = await compileMDX({
source,
options: {
parseFrontmatter: true,
mdxOptions: {
remarkPlugins: [remarkGfm],
rehypePlugins: [rehypeHighlight],
},
},
});
return { frontmatter, content, slug };
}
export async function getAllBlogSlugs() {
const files = fs.readdirSync(contentDir);
return files.map(file => ({
slug: path.parse(file).name,
}));
}

View File

@@ -1,4 +0,0 @@
/** @type {import('next').NextConfig} */
const nextConfig = {};
export default nextConfig;

View File

@@ -1,38 +1,20 @@
{
"name": "web",
"version": "0.1.0",
"name": "src",
"version": "0.0.1",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@types/react": "^18.3.3",
"framer-motion": "^11.2.10",
"next": "14.2.3",
"next-mdx-remote": "^5.0.0",
"next-themes": "^0.3.0",
"prism-react-renderer": "^2.3.1",
"prismjs": "^1.29.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-icons": "^5.2.1",
"rehype": "^13.0.1",
"rehype-highlight": "^7.0.0",
"rehype-raw": "^7.0.0",
"remark": "^15.0.1",
"remark-gfm": "^4.0.0",
"remark-parse": "^11.0.0",
"remark-rehype": "^11.1.0",
"typewriter-effect": "^2.21.0",
"unified": "^11.0.4"
"dev": "astro dev",
"start": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
},
"devDependencies": {
"@shikijs/rehype": "^1.6.4",
"@tailwindcss/typography": "^0.5.13",
"postcss": "^8",
"tailwindcss": "^3.4.1"
"@astrojs/tailwind": "3.1.1",
"astro": "2.1.3",
"autoprefixer": "10.4.14",
"canvas-confetti": "1.6.0",
"postcss": "8.4.21",
"tailwindcss": "3.2.7"
}
}
}

3733
src/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +0,0 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
tailwindcss: {},
},
};
export default config;

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg>

Before

Width:  |  Height:  |  Size: 629 B

11
src/sandbox.config.json Normal file
View File

@@ -0,0 +1,11 @@
{
"infiniteLoopProtection": true,
"hardReloadOnChange": false,
"view": "browser",
"template": "node",
"container": {
"port": 3000,
"startScript": "start",
"node": "14"
}
}

1
src/src/env.d.ts vendored Normal file
View File

@@ -0,0 +1 @@
/// <reference types="astro/client" />

View File

@@ -0,0 +1,15 @@
---
const { content } = Astro.props;
---
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>{content.title}</title>
</head>
<body>
<slot />
</body>
</html>

20
src/src/pages/index.astro Normal file
View File

@@ -0,0 +1,20 @@
---
import "@/style/globals.css"
---
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<!-- <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> -->
<meta name="generator" content={Astro.generator} />
<title>Timothy Pidashev</title>
</head>
<body class="bg-background text-foreground">
<div class="flex items-center justify-center h-screen w-full">
<h1 class="text-4xl text-aqua font-bold">Coming Soon</h1>
</div>
</body>
</html>

View File

@@ -1,16 +1,8 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@taildwind typography;
/* Chrome, Edge, and Safari */
*::-webkit-scrollbar {
display: none;
}
@import "tailwindcss/components";
@import "tailwindcss/utilities";
/* Regular */
@font-face {
font-family: "ComicRegular";
@@ -42,105 +34,3 @@ body {
.italic-text {
font-family: "ComicCodeItalic";
}
/* footer position style */
.footer {
position: relative;
}
.footer-fixed {
position: fixed;
bottom: 0;
}
/* Gruvbox Dark Theme for Rehype-highlight with Black Background and No Border */
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #000000; /* Changed background to black */
color: #ebdbb2;
border: none; /* Remove border */
border-width: 0; /* Ensure no border width */
border-style: none; /* Ensure no border style */
outline: none; /* Remove outline if any */
}
.hljs-comment,
.hljs-quote {
color: #928374;
font-style: italic;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-literal,
.hljs-doctag,
.hljs-title,
.hljs-section,
.hljs-type,
.hljs-attr {
color: #fb4934;
}
.hljs-name,
.hljs-builtin-name,
.hljs-tag {
color: #fabd2f;
}
.hljs-attribute,
.hljs-symbol,
.hljs-bullet,
.hljs-addition {
color: #b8bb26;
}
.hljs-string,
.hljs-title.class_ {
color: #b8bb26;
}
.hljs-number,
.hljs-selector-attr,
.hljs-template-variable,
.hljs-variable,
.hljs-selector-id {
color: #d3869b;
}
.hljs-subst,
.hljs-class,
.hljs-function {
color: #8ec07c;
}
.hljs-regexp,
.hljs-link {
color: #d3869b;
}
.hljs-meta {
color: #fe8019;
}
.hljs-built_in,
.hljs-deletion,
.hljs-emphasis {
color: #fb4934;
}
.hljs-strong {
font-weight: bold;
}
.hljs-formula {
background: #000000;
color: #d3869b;
border: none; /* Remove border */
border-width: 0; /* Ensure no border width */
border-style: none; /* Ensure no border style */
outline: none; /* Remove outline if any */
}

40
src/tailwind.config.cjs Normal file
View File

@@ -0,0 +1,40 @@
module.exports = {
content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"],
theme: {
extend: {
colors: {
background: "#000000",
foreground: "#ebdbb2",
red: {
DEFAULT: "#cc241d",
bright: "#fb4934"
},
orange: {
DEFAULT: "#d65d0e",
bright: "#fe8019"
},
green: {
DEFAULT: "#98971a",
bright: "#b8bb26"
},
yellow: {
DEFAULT: "#d79921",
bright: "#fabd2f"
},
blue: {
DEFAULT: "#458588",
bright: "#83a598"
},
purple: {
DEFAULT: "#b16286",
bright: "#d3869b"
},
aqua: {
DEFAULT: "#689d6a",
bright: "#8ec07c"
}
}
}
},
plugins: [],
};

View File

@@ -1,159 +0,0 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
"./components/**/*.{js,ts,jsx,tsx,mdx}",
"./app/**/*.{js,ts,jsx,tsx,mdx}",
],
darkMode: "class",
theme: {
extend: {
colors: {
light:{
background: "#282828",
foreground: "#ebdbb2",
red: {
1: "#cc241d",
2: "#fb4934"
},
orange: {
1: "#d65d0e",
2: "#fe8019"
},
green: {
1: "#98971a",
2: "#b8bb26"
},
yellow: {
1: "#d79921",
2: "#fabd2f"
},
blue: {
1: "#458588",
2: "#83a598"
},
purple: {
1: "#b16286",
2: "#d3869b"
},
aqua: {
1: "#689d6a",
2: "#8ec07c"
},
},
dark: {
background: "#000000",
foreground: "#ebdbb2",
red: {
1: "#cc241d",
2: "#fb4934"
},
orange: {
1: "#d65d0e",
2: "#fe8019"
},
green: {
1: "#98971a",
2: "#b8bb26"
},
yellow: {
1: "#d79921",
2: "#fabd2f"
},
blue: {
1: "#458588",
2: "#83a598"
},
purple: {
1: "#b16286",
2: "#d3869b"
},
aqua: {
1: "#689d6a",
2: "#8ec07c"
},
},
},
typography: (theme) => ({
DEFAULT: {
css: {
color: theme('colors.light.foreground'),
a: {
color: theme('colors.light.blue.2'),
'&:hover': {
color: theme('colors.light.blue.1'),
},
},
h1: {
color: theme('colors.light.foreground'),
},
h2: {
color: theme('colors.light.foreground'),
},
h3: {
color: theme('colors.light.foreground'),
},
h4: {
color: theme('colors.light.foreground'),
},
h5: {
color: theme('colors.light.foreground'),
},
h6: {
color: theme('colors.light.foreground'),
},
strong: {
color: theme('colors.light.foreground'),
},
code: {
color: theme('colors.light.orange.1'),
},
blockquote: {
color: theme('colors.light.foreground'),
},
},
},
dark: {
css: {
color: theme('colors.light.foreground'), // Keeping same as light mode
a: {
color: theme('colors.light.blue.2'),
'&:hover': {
color: theme('colors.light.blue.1'),
},
},
h1: {
color: theme('colors.light.foreground'),
},
h2: {
color: theme('colors.light.foreground'),
},
h3: {
color: theme('colors.light.foreground'),
},
h4: {
color: theme('colors.light.foreground'),
},
h5: {
color: theme('colors.light.foreground'),
},
h6: {
color: theme('colors.light.foreground'),
},
strong: {
color: theme('colors.light.foreground'),
},
code: {
color: theme('colors.light.orange.1'),
},
blockquote: {
color: theme('colors.light.foreground'),
},
},
},
}),
},
},
plugins: [require("@tailwindcss/typography")],
};

9
src/tsconfig.json Normal file
View File

@@ -0,0 +1,9 @@
{
"extends": "astro/tsconfigs/base",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}

File diff suppressed because it is too large Load Diff