mirror of
https://github.com/timmypidashev/web.git
synced 2026-04-14 11:03:50 +00:00
Begin rewrite to astro
This commit is contained in:
0
.caddy/Caddyfile.release
Normal file
0
.caddy/Caddyfile.release
Normal file
@@ -1,5 +0,0 @@
|
||||
timmypidashev.localhost {
|
||||
encode gzip
|
||||
|
||||
reverse_proxy web:3000
|
||||
}
|
||||
@@ -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
0
compose.override.yml
Normal 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
0
compose.yml
Normal 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
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"extends": "next/core-web-vitals"
|
||||
}
|
||||
6
src/.stackblitzrc
Normal file
6
src/.stackblitzrc
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"startCommand": "npm start",
|
||||
"env": {
|
||||
"ENABLE_CJS_IMPORTS": true
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
[](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).
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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)
|
||||
|
||||

|
||||
|
||||
> 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>
|
||||
@@ -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
|
||||
@@ -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 |
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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
|
||||
@@ -1,9 +0,0 @@
|
||||
// Imports
|
||||
import Hero from "@/components/hero";
|
||||
|
||||
// Exports
|
||||
export default function Index() {
|
||||
return (
|
||||
<Hero />
|
||||
);
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
import PageTransition from "@/components/ui/transitions";
|
||||
|
||||
export default function rootTemplate({ children }) {
|
||||
return <PageTransition>{children}</PageTransition>;
|
||||
}
|
||||
@@ -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
7
src/astro.config.mjs
Normal file
@@ -0,0 +1,7 @@
|
||||
import { defineConfig } from 'astro/config';
|
||||
import tailwind from '@astrojs/tailwind';
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
integrations: [tailwind()],
|
||||
});
|
||||
@@ -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;
|
||||
@@ -1,9 +0,0 @@
|
||||
import Content from "@/components/footer/content";
|
||||
|
||||
function Footer() {
|
||||
return (
|
||||
<Content />
|
||||
);
|
||||
}
|
||||
|
||||
export default Footer;
|
||||
@@ -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"
|
||||
};
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -1,12 +0,0 @@
|
||||
"use client"
|
||||
|
||||
import React from 'react';
|
||||
import Content from '@/components/hero/content';
|
||||
|
||||
function Hero() {
|
||||
return (
|
||||
<Content />
|
||||
);
|
||||
}
|
||||
|
||||
export default Hero;
|
||||
@@ -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;
|
||||
@@ -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')} />
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"@/*": ["./*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
}));
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {};
|
||||
|
||||
export default nextConfig;
|
||||
@@ -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
3733
src/pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,8 +0,0 @@
|
||||
/** @type {import('postcss-load-config').Config} */
|
||||
const config = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
},
|
||||
};
|
||||
|
||||
export default config;
|
||||
@@ -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 |
@@ -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
11
src/sandbox.config.json
Normal 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
1
src/src/env.d.ts
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/// <reference types="astro/client" />
|
||||
15
src/src/layouts/main.astro
Normal file
15
src/src/layouts/main.astro
Normal 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
20
src/src/pages/index.astro
Normal 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>
|
||||
@@ -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
40
src/tailwind.config.cjs
Normal 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: [],
|
||||
};
|
||||
@@ -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
9
src/tsconfig.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/base",
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["src/*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
2513
src/yarn.lock
2513
src/yarn.lock
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user