diff --git a/.gitignore b/.gitignore index a128d25..f934cf6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,38 +1,25 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +# build output +dist/ +.output/ # dependencies -data -node_modules -.pnp -.pnp.js -tmp/ +node_modules/ -# testing -coverage - -# next.js -.next/ -out/ -build - -# misc -.DS_Store -*.pem - -# debug +# logs npm-debug.log* yarn-debug.log* yarn-error.log* +pnpm-debug.log* -# local env files + +# environment variables .env -.env.local -.env.development.local -.env.test.local -.env.production.local +.env.production -# turbo -.turbo +# macOS-specific files +.DS_Store -# vercel -.vercel +# misc +*.pem +.cache +.astro \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 8b38db9..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "explorer.excludeGitIgnore": false, - "workbench.colorCustomizations": { - "activityBar.activeBackground": "#95ee3a", - "activityBar.background": "#95ee3a", - "activityBar.foreground": "#15202b", - "activityBar.inactiveForeground": "#15202b99", - "activityBarBadge.background": "#3290ed", - "activityBarBadge.foreground": "#e7e7e7", - "commandCenter.border": "#15202b99", - "sash.hoverBorder": "#95ee3a", - "statusBar.background": "#7ce114", - "statusBar.foreground": "#15202b", - "statusBarItem.hoverBackground": "#62b210", - "statusBarItem.remoteBackground": "#7ce114", - "statusBarItem.remoteForeground": "#15202b", - "titleBar.activeBackground": "#7ce114", - "titleBar.activeForeground": "#15202b", - "titleBar.inactiveBackground": "#7ce11499", - "titleBar.inactiveForeground": "#15202b99" - }, - "peacock.color": "#7ce114" -} diff --git a/mdx-components.tsx b/mdx-components.tsx deleted file mode 100644 index f52334c..0000000 --- a/mdx-components.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { type MDXComponents } from 'mdx/types' - -export function useMDXComponents(components: MDXComponents) { - return { - ...components, - } -} diff --git a/next-env.d.ts b/next-env.d.ts deleted file mode 100644 index 4f11a03..0000000 --- a/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx deleted file mode 100644 index 75e595c..0000000 --- a/src/app/about/page.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import { type Metadata } from 'next' -import Image from 'next/image' -import Link from 'next/link' -import clsx from 'clsx' - -import { Container } from '@/components/Container' -import { - GitHubIcon, - InstagramIcon, - LinkedInIcon, - MediumIcon, - TwitterIcon, -} from '@/components/SocialIcons' -import portraitImage from '@/images/portrait.jpg' - -function SocialLink({ - className, - href, - children, - icon: Icon, -}: { - className?: string - href: string - icon: React.ComponentType<{ className?: string }> - children: React.ReactNode -}) { - return ( -
  • - - - {children} - -
  • - ) -} - -function MailIcon(props: React.ComponentPropsWithoutRef<'svg'>) { - return ( - - ) -} - -export const metadata: Metadata = { - title: 'About', - description: - 'I\'m Prad Nukala, founder of Sonr and blockchain identity pioneer. Building the future of decentralized identity in New York City.', -} - -export default function About() { - return ( - -
    -
    -
    - -
    -
    -
    -

    - I\'m Prad Nukala. I live in New York City, where I\'m building the future of digital identity. -

    -
    -

    - I\'ve been passionate about technology since the introduction of the App Store, where I made one - of the first 5,000 apps at age 12. This early start in mobile development shaped my understanding - of how technology can empower individuals and sparked my lifelong commitment to building tools that - put users first. -

    -

    - My journey in blockchain began with a simple realization: the internet\'s identity layer is fundamentally - broken. Users have no control over their digital selves, leading to privacy breaches, data exploitation, - and a web that serves corporations over people. This inspired me to found Sonr in 2020, where we\'re - building an IBC-enabled blockchain specifically designed for decentralized identity. -

    -

    - As a W3C Working Group Member for DIDs, WebAuthn, and WASM, I\'m actively shaping the standards that - will define the future of digital identity. My technical contributions speak to my commitment - with over - 6,000 GitHub contributions from 2021-2023, I was ranked as the 4th most active contributor worldwide. - Before Sonr, I self-developed over 10 projects that garnered more than 1 million downloads combined. -

    -

    - Today, I lead Sonr with a clear mission: to create a peer-to-peer identity and asset management system - that leverages DID documents, WebAuthn, and IPFS. We\'ve raised $4.7M in funding and onboarded over 120 - first-time blockchain developers to our platform. Our technology features passkey-based user accounts, - DKLS-MPC powered wallets (no seed phrases), and lightning-fast 600ms wallet generation. I believe the - future of the internet is one where users own their identity, control their data, and interact on their - own terms. -

    -
    -
    -
    -
      - - Follow on Twitter - - - Follow on Medium - - - Follow on GitHub - - - Follow on LinkedIn - - - prad.nukala@sonr.io - -
    -
    -
    -
    - ) -} diff --git a/src/app/articles/building-sonr-decentralized-identity/page.mdx b/src/app/articles/building-sonr-decentralized-identity/page.mdx deleted file mode 100644 index 84a2ed9..0000000 --- a/src/app/articles/building-sonr-decentralized-identity/page.mdx +++ /dev/null @@ -1,90 +0,0 @@ -import { ArticleLayout } from '@/components/ArticleLayout' - -export const article = { - author: 'Prad Nukala', - date: '2024-01-15', - title: 'Building Sonr: The Journey to Decentralized Identity', - description: - 'How we\'re creating an IBC-enabled blockchain that puts users in control of their digital identity, eliminating passwords and seed phrases while maintaining true self-sovereignty.', -} - -export const metadata = { - title: article.title, - description: article.description, -} - -export default (props) => - -When I founded Sonr in 2020, I had a simple but ambitious vision: create a world where people truly own their digital identity. After years of watching data breaches, privacy violations, and the centralization of user data, I knew there had to be a better way. - -## The Problem with Digital Identity Today - -The internet wasn\'t designed with identity in mind. We\'ve patched together solutions using usernames, passwords, and centralized databases, but these approaches are fundamentally broken: - -- **No User Control**: Your identity lives on servers you don\'t control -- **Privacy Violations**: Companies monetize your personal data without consent -- **Security Nightmares**: Password breaches affect billions of users annually -- **Platform Lock-in**: Your identity is fragmented across countless services - -## Enter Sonr: A New Paradigm - -Sonr is an IBC-enabled blockchain specifically designed for decentralized identity. We\'re not just building another blockchain - we\'re creating the identity layer the internet should have had from the beginning. - -### Key Innovations - -1. **Passkey-Based Authentication**: No more passwords. Users authenticate with biometrics or device-based keys, making phishing virtually impossible. - -2. **No Seed Phrases**: Using DKLS-MPC (Distributed Key Lifetime Security - Multi-Party Computation), we\'ve eliminated the need for users to manage complex seed phrases while maintaining true ownership. - -3. **Lightning-Fast Performance**: 600ms wallet generation means users can onboard as quickly as traditional web apps. - -4. **IBC Integration**: As part of the Cosmos ecosystem, Sonr identities work seamlessly across multiple blockchains. - -## Technical Architecture - -At its core, Sonr leverages several cutting-edge technologies: - -```typescript -// Example: Creating a Sonr identity -const identity = await Sonr.createIdentity({ - authentication: 'passkey', - storage: 'ipfs', - recovery: 'social' -}); - -// The user now has a DID (Decentralized Identifier) -console.log(identity.did); // did:sonr:abc123... -``` - -### DID Documents -Every Sonr user has a DID document stored on-chain that contains their public keys and service endpoints. This document is the source of truth for their identity. - -### IPFS Integration -User data is stored on IPFS, ensuring it\'s distributed, permanent, and under user control. Only the user\'s keys can decrypt their personal information. - -### UCAN Tokens -We use User Controlled Authorization Networks (UCAN) for fine-grained access control. Users can delegate specific permissions without sharing their private keys. - -## Real-World Impact - -Since launching, we\'ve: -- Raised $4.7M in funding to accelerate development -- Onboarded over 120 first-time blockchain developers -- Created tools that make blockchain accessible to mainstream developers -- Built partnerships across the Cosmos ecosystem - -## The Road Ahead - -We\'re currently preparing for our public testnet launch, with mainnet coming soon. Our goal is to onboard the next billion users to Web3 - not by forcing them to understand blockchain, but by making it invisible. - -The future of the internet is one where: -- Users own their identity and data -- Privacy is default, not optional -- Security doesn\'t sacrifice usability -- Interoperability is built-in, not bolted-on - -## Join the Revolution - -If you\'re a developer interested in building on Sonr, check out our [documentation](https://docs.sonr.io) and [GitHub](https://github.com/sonr-io). We\'re always looking for contributors who share our vision of a more equitable internet. - -The identity layer of the internet is broken, but together, we can fix it. Welcome to Sonr - where your identity truly belongs to you. \ No newline at end of file diff --git a/src/app/articles/future-of-digital-identity/page.mdx b/src/app/articles/future-of-digital-identity/page.mdx deleted file mode 100644 index 06e758b..0000000 --- a/src/app/articles/future-of-digital-identity/page.mdx +++ /dev/null @@ -1,131 +0,0 @@ -import { ArticleLayout } from '@/components/ArticleLayout' - -export const article = { - author: 'Prad Nukala', - date: '2023-09-10', - title: 'The Future of Digital Identity: Self-Sovereign and Interoperable', - description: - 'Digital identity is broken. Here\'s how decentralized identifiers (DIDs), verifiable credentials, and blockchain technology will create a future where you truly own your identity.', -} - -export const metadata = { - title: article.title, - description: article.description, -} - -export default (props) => - -Every day, billions of people prove who they are online using systems designed in the 1960s. Usernames and passwords were meant to be temporary solutions, yet here we are, six decades later, still typing "password123" and hoping for the best. - -As someone who\'s been building technology since creating one of the first App Store apps, and now as a W3C Working Group Member for DIDs and WebAuthn, I\'ve seen firsthand how broken our identity systems are. It\'s time for a fundamental shift. - -## The Current Identity Crisis - -Today\'s digital identity landscape is a disaster: - -- **2.5 billion** records were exposed in data breaches last year -- The average person has **100+ passwords** to manage -- Identity theft affects **1 in 15 people** annually -- Users have **zero control** over their personal data - -But the real problem isn\'t just security - it\'s ownership. Your digital identity doesn\'t belong to you. It belongs to Facebook, Google, your bank, your employer, and dozens of other entities. - -## Enter Self-Sovereign Identity - -Self-sovereign identity (SSI) flips the script. Instead of companies owning your identity, you do. Here\'s how it works: - -### Decentralized Identifiers (DIDs) -A DID is like a phone number for your identity - unique, permanent, and owned by you. Unlike usernames, DIDs aren\'t controlled by any company. - -``` -did:sonr:1234567890abcdef -``` - -This simple string represents your entire digital identity, secured by cryptography rather than corporate databases. - -### Verifiable Credentials -Imagine your driver\'s license, but digital and cryptographically verifiable. That\'s a verifiable credential. Your university can issue you a degree credential, your employer can issue an employment credential, and you store them in your digital wallet. - -The magic? You can prove things about yourself without revealing everything. Need to prove you\'re over 21? You don\'t need to share your birthdate - just a cryptographic proof that you meet the requirement. - -## The Sonr Implementation - -At Sonr, we\'re not just theorizing about SSI - we\'re building it. Our approach combines: - -1. **IBC-Enabled Blockchain**: Your identity works across multiple chains, not locked to one ecosystem -2. **IPFS Storage**: Your data is distributed and permanent, not sitting in vulnerable databases -3. **WebAuthn Integration**: Authenticate with your fingerprint, not passwords -4. **UCAN Authorization**: Grant specific permissions without sharing your keys - -## Real-World Applications - -This isn\'t just technology for technology\'s sake. Here\'s how SSI will change everyday life: - -### Healthcare -- Carry your medical records with you -- Share only relevant information with providers -- Maintain privacy while ensuring continuity of care - -### Finance -- Instant KYC/AML compliance without repeated paperwork -- Prove creditworthiness without exposing financial details -- Access global financial services with one identity - -### Education -- Verifiable diplomas that can\'t be faked -- Instant credential verification for employers -- Lifelong learning records that follow you - -### Travel -- Digital passports that speed up border crossings -- Vaccination records that are instantly verifiable -- One identity for all your travel needs - -## The Technical Foundation - -Building SSI requires solving complex technical challenges: - -```typescript -// Creating a verifiable credential -const credential = await Sonr.createCredential({ - type: 'UniversityDegree', - subject: userDID, - claims: { - degree: 'Computer Science', - graduationDate: '2023-05-15' - } -}); - -// Selective disclosure - prove graduation without revealing degree -const proof = await credential.generateProof({ - reveal: ['graduationDate'] -}); -``` - -## Privacy by Design - -Unlike current systems where privacy is an afterthought, SSI builds privacy in from the ground up: - -- **Minimal Disclosure**: Share only what\'s necessary -- **User Consent**: Every data share requires explicit permission -- **Pseudonymity**: Use different identifiers for different contexts -- **Revocation**: Withdraw access to your data anytime - -## The Path Forward - -Transitioning to SSI won\'t happen overnight, but the momentum is building: - -- W3C standards for DIDs and Verifiable Credentials are finalized -- Governments are piloting digital identity programs -- Major tech companies are adopting WebAuthn -- The EU\'s eIDAS 2.0 regulation mandates digital wallets by 2024 - -## Join the Identity Revolution - -The future of identity isn\'t about better passwords or more secure databases. It\'s about fundamentally reimagining the relationship between individuals and their digital selves. - -At Sonr, we\'re building this future today. Whether you\'re a developer wanting to integrate SSI, an organization looking to issue credentials, or just someone tired of password resets, there\'s a place for you in this revolution. - -The question isn\'t whether self-sovereign identity will replace current systems - it\'s how quickly we can make it happen. The technology is here. The standards are set. Now we need builders, advocates, and early adopters to make it reality. - -Your identity belongs to you. It\'s time we built an internet that respects that. \ No newline at end of file diff --git a/src/app/articles/page.tsx b/src/app/articles/page.tsx deleted file mode 100644 index 61b8d24..0000000 --- a/src/app/articles/page.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { type Metadata } from 'next' - -import { Card } from '@/components/Card' -import { SimpleLayout } from '@/components/SimpleLayout' -import { type ArticleWithSlug, getAllArticles } from '@/lib/articles' -import { formatDate } from '@/lib/formatDate' - -function Article({ article }: { article: ArticleWithSlug }) { - return ( -
    - - - {article.title} - - - {formatDate(article.date)} - - {article.description} - Read article - - - {formatDate(article.date)} - -
    - ) -} - -export const metadata: Metadata = { - title: 'Articles', - description: - 'All of my long-form thoughts on programming, leadership, product design, and more, collected in chronological order.', -} - -export default async function ArticlesIndex() { - let articles = await getAllArticles() - - return ( - -
    -
    - {articles.map((article) => ( -
    - ))} -
    -
    -
    - ) -} diff --git a/src/app/articles/why-blockchain-needs-better-ux/page.mdx b/src/app/articles/why-blockchain-needs-better-ux/page.mdx deleted file mode 100644 index 7a95cb2..0000000 --- a/src/app/articles/why-blockchain-needs-better-ux/page.mdx +++ /dev/null @@ -1,97 +0,0 @@ -import { ArticleLayout } from '@/components/ArticleLayout' - -export const article = { - author: 'Prad Nukala', - date: '2023-11-20', - title: 'Why Blockchain Needs Better UX (And How We\'re Fixing It)', - description: - 'The biggest barrier to blockchain adoption isn\'t scalability or regulation - it\'s user experience. Here\'s how we\'re making Web3 as easy as Web2.', -} - -export const metadata = { - title: article.title, - description: article.description, -} - -export default (props) => - -Ask any blockchain developer about the biggest challenge facing our industry, and you\'ll hear about scalability, regulation, or interoperability. But after years of building in this space and onboarding over 120 developers to blockchain, I\'ve learned the real barrier is much simpler: user experience. - -## The UX Crisis in Web3 - -Let\'s be honest about the current state of blockchain UX: - -- **Seed Phrases**: Asking users to write down 24 random words and never lose them is a non-starter for mainstream adoption -- **Gas Fees**: Imagine if every click on the internet cost money and required manual approval -- **Addresses**: 42-character hexadecimal strings are not how humans think about identity -- **Transaction Times**: Waiting minutes for confirmations kills any semblance of modern app experience - -These aren\'t technical limitations - they\'re design choices we\'ve accepted as "the way blockchain works." - -## Learning from History - -When I created one of the first 5,000 apps on the App Store at age 12, the iPhone had just made computing accessible to everyone. Not by making people understand computers, but by hiding the complexity behind intuitive interfaces. - -Blockchain needs its iPhone moment. - -## The Sonr Approach - -At Sonr, we\'ve rethought blockchain UX from first principles: - -### 1. No Seed Phrases -Using DKLS-MPC technology, users never see or manage private keys. Account recovery uses familiar methods like email or social recovery - not a piece of paper in a safe. - -### 2. Instant Onboarding -Our 600ms wallet generation means users can start using blockchain apps as quickly as they\'d sign up for any web service. No downloads, no extensions, no friction. - -### 3. Passkey Authentication -Leveraging WebAuthn standards, users authenticate with their fingerprint or face - the same way they unlock their phones. It\'s more secure than passwords and infinitely more user-friendly. - -### 4. Invisible Blockchain -Users shouldn\'t need to understand consensus mechanisms any more than they need to understand TCP/IP to browse the web. Blockchain should be infrastructure, not interface. - -## Real Code, Real Solutions - -Here\'s how simple it is to integrate Sonr: - -```javascript -// Traditional Web3 -const accounts = await ethereum.request({ - method: 'eth_requestAccounts' -}); -// User must have MetaMask installed -// User must understand gas fees -// User must protect seed phrase - -// With Sonr -const user = await Sonr.authenticate(); -// That\'s it. No wallet required. -// No seed phrases. Just works. -``` - -## The Broader Impact - -Better UX isn\'t just about convenience - it\'s about accessibility and inclusion. When we make blockchain easier to use, we: - -- **Reduce Scams**: Simpler interfaces mean fewer opportunities for user error -- **Increase Adoption**: Lower barriers mean more users and developers -- **Enable Innovation**: When basics are solved, builders can focus on novel applications - -## Looking Forward - -As a W3C Working Group Member, I\'m helping shape standards that will make these UX improvements universal. The future of blockchain isn\'t about teaching billions of people new concepts - it\'s about making those concepts invisible. - -## The Challenge to Builders - -If you\'re building in Web3, ask yourself: -- Would my parents be able to use this? -- Does it require reading documentation? -- Are there more than 3 steps to get started? - -If the answer to any of these is yes, we have work to do. - -## Join the UX Revolution - -The blockchain industry has brilliant technologists, but we need more designers, more product thinkers, and more people who put users first. If you\'re interested in making blockchain accessible to everyone, [reach out](mailto:prad.nukala@sonr.io). - -The future of the internet depends on making it usable by everyone, not just the technically sophisticated. Let\'s build that future together. \ No newline at end of file diff --git a/src/app/favicon.ico b/src/app/favicon.ico deleted file mode 100644 index 1944a1b..0000000 Binary files a/src/app/favicon.ico and /dev/null differ diff --git a/src/app/feed.xml/route.ts b/src/app/feed.xml/route.ts deleted file mode 100644 index bf96d63..0000000 --- a/src/app/feed.xml/route.ts +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert' -import * as cheerio from 'cheerio' -import { Feed } from 'feed' - -export async function GET(req: Request) { - let siteUrl = process.env.NEXT_PUBLIC_SITE_URL - - if (!siteUrl) { - throw Error('Missing NEXT_PUBLIC_SITE_URL environment variable') - } - - let author = { - name: 'Prad Nukala', - email: 'spencer@planetaria.tech', - } - - let feed = new Feed({ - title: author.name, - description: 'Your blog description', - author, - id: siteUrl, - link: siteUrl, - image: `${siteUrl}/favicon.ico`, - favicon: `${siteUrl}/favicon.ico`, - copyright: `All rights reserved ${new Date().getFullYear()}`, - feedLinks: { - rss2: `${siteUrl}/feed.xml`, - }, - }) - - let articleIds = require - .context('../articles', true, /\/page\.mdx$/) - .keys() - .filter((key) => key.startsWith('./')) - .map((key) => key.slice(2).replace(/\/page\.mdx$/, '')) - - for (let id of articleIds) { - let url = String(new URL(`/articles/${id}`, req.url)) - let html = await (await fetch(url)).text() - let $ = cheerio.load(html) - - let publicUrl = `${siteUrl}/articles/${id}` - let article = $('article').first() - let title = article.find('h1').first().text() - let date = article.find('time').first().attr('datetime') - let content = article.find('[data-mdx-content]').first().html() - - assert(typeof title === 'string') - assert(typeof date === 'string') - assert(typeof content === 'string') - - feed.addItem({ - title, - id: publicUrl, - link: publicUrl, - content, - author: [author], - contributor: [author], - date: new Date(date), - }) - } - - return new Response(feed.rss2(), { - status: 200, - headers: { - 'content-type': 'application/xml', - 'cache-control': 's-maxage=31556952', - }, - }) -} diff --git a/src/app/layout.tsx b/src/app/layout.tsx deleted file mode 100644 index 762a747..0000000 --- a/src/app/layout.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { type Metadata } from 'next' - -import { Providers } from '@/app/providers' -import { Layout } from '@/components/Layout' - -import '@/styles/tailwind.css' - -export const metadata: Metadata = { - title: { - template: '%s - Prad Nukala', - default: - 'Prad Nukala - Founder & CEO of Sonr, Blockchain Identity Pioneer', - }, - description: - 'I\'m Prad Nukala, founder and CEO of Sonr, an IBC-enabled blockchain for decentralized identity. W3C Working Group Member for DIDs, WebAuthn, and WASM. Building the future of self-sovereign identity and empowering users with control over their digital assets.', - alternates: { - types: { - 'application/rss+xml': `${process.env.NEXT_PUBLIC_SITE_URL}/feed.xml`, - }, - }, -} - -export default function RootLayout({ - children, -}: { - children: React.ReactNode -}) { - return ( - - - -
    - {children} -
    -
    - - - ) -} diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx deleted file mode 100644 index 4067f6f..0000000 --- a/src/app/not-found.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Button } from '@/components/Button' -import { Container } from '@/components/Container' - -export default function NotFound() { - return ( - -
    -

    - 404 -

    -

    - Page not found -

    -

    - Sorry, we couldn’t find the page you’re looking for. -

    - -
    -
    - ) -} diff --git a/src/app/page.tsx b/src/app/page.tsx deleted file mode 100644 index 7e7eed8..0000000 --- a/src/app/page.tsx +++ /dev/null @@ -1,328 +0,0 @@ -import Image, { type ImageProps } from 'next/image' -import Link from 'next/link' -import clsx from 'clsx' - -import { Button } from '@/components/Button' -import { Card } from '@/components/Card' -import { Container } from '@/components/Container' -import { - GitHubIcon, - InstagramIcon, - LinkedInIcon, - MediumIcon, - TwitterIcon, -} from '@/components/SocialIcons' -import logoAirbnb from '@/images/logos/spacebolt.svg' -import logoFacebook from '@/images/logos/voluntree.svg' -import logoPlanetaria from '@/images/logos/sonr.svg' -import logoStarbucks from '@/images/logos/superball.svg' -import image1 from '@/images/photos/image-1.jpg' -import image2 from '@/images/photos/image-2.jpg' -import image3 from '@/images/photos/image-3.jpg' -import image4 from '@/images/photos/image-4.jpg' -import image5 from '@/images/photos/image-5.jpg' -import { type ArticleWithSlug, getAllArticles } from '@/lib/articles' -import { formatDate } from '@/lib/formatDate' - -function MailIcon(props: React.ComponentPropsWithoutRef<'svg'>) { - return ( - - ) -} - -function BriefcaseIcon(props: React.ComponentPropsWithoutRef<'svg'>) { - return ( - - ) -} - -function ArrowDownIcon(props: React.ComponentPropsWithoutRef<'svg'>) { - return ( - - ) -} - -function Article({ article }: { article: ArticleWithSlug }) { - return ( - - - {article.title} - - - {formatDate(article.date)} - - {article.description} - Read article - - ) -} - -function SocialLink({ - icon: Icon, - ...props -}: React.ComponentPropsWithoutRef & { - icon: React.ComponentType<{ className?: string }> -}) { - return ( - - - - ) -} - -function Newsletter() { - return ( -
    -

    - - Stay up to date -

    -

    - Get notified about updates on Sonr, blockchain technology insights, and decentralized identity developments. -

    -
    - - -
    -
    - ) -} - -interface Role { - company: string - title: string - logo: ImageProps['src'] - start: string | { label: string; dateTime: string } - end: string | { label: string; dateTime: string } -} - -function Role({ role }: { role: Role }) { - let startLabel = - typeof role.start === 'string' ? role.start : role.start.label - let startDate = - typeof role.start === 'string' ? role.start : role.start.dateTime - - let endLabel = typeof role.end === 'string' ? role.end : role.end.label - let endDate = typeof role.end === 'string' ? role.end : role.end.dateTime - - return ( -
  • -
    - -
    -
    -
    Company
    -
    - {role.company} -
    -
    Role
    -
    - {role.title} -
    -
    Date
    -
    - {' '} - {' '} - -
    -
    -
  • - ) -} - -function Resume() { - let resume: Array = [ - { - company: 'Sonr', - title: 'Founder & CEO', - logo: logoPlanetaria, - start: '2020', - end: { - label: 'Present', - dateTime: new Date().getFullYear().toString(), - }, - }, - { - company: 'W3C Working Group', - title: 'Member - DIDs, WebAuthn, WASM', - logo: logoAirbnb, - start: '2021', - end: { - label: 'Present', - dateTime: new Date().getFullYear().toString(), - }, - }, - { - company: 'Open Source', - title: '4th Most GitHub Contributions Worldwide', - logo: logoFacebook, - start: '2021', - end: '2023', - }, - { - company: 'Early iOS Developer', - title: 'One of the first 5,000 App Store apps', - logo: logoStarbucks, - start: '2008', - end: '2012', - }, - ] - - return ( -
    -

    - - Experience -

    -
      - {resume.map((role, roleIndex) => ( - - ))} -
    - -
    - ) -} - -function Photos() { - let rotations = ['rotate-2', '-rotate-2', 'rotate-2', 'rotate-2', '-rotate-2'] - - return ( -
    -
    - {[image1, image2, image3, image4, image5].map((image, imageIndex) => ( -
    - -
    - ))} -
    -
    - ) -} - -export default async function Home() { - let articles = (await getAllArticles()).slice(0, 4) - - return ( - <> - -
    -

    - Blockchain pioneer, founder, and decentralized identity architect. -

    -

    - I\'m Prad Nukala, founder and CEO of Sonr, an IBC-enabled blockchain for decentralized identity. - As a W3C Working Group Member for DIDs, WebAuthn, and WASM, I\'m building the future where users - control their digital identity and assets. With over 6000+ GitHub contributions, I\'m passionate - about making blockchain technology accessible to everyone. -

    -
    - - - - -
    -
    -
    - - -
    -
    - {articles.map((article) => ( -
    - ))} -
    -
    - - -
    -
    -
    - - ) -} diff --git a/src/app/projects/page.tsx b/src/app/projects/page.tsx deleted file mode 100644 index 333f9fc..0000000 --- a/src/app/projects/page.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import { type Metadata } from 'next' -import Image from 'next/image' - -import { Card } from '@/components/Card' -import { SimpleLayout } from '@/components/SimpleLayout' -import logoSuperball from '@/images/logos/superball.svg' -import logoVoluntree from '@/images/logos/voluntree.svg' -import logoSpacebolt from '@/images/logos/spacebolt.svg' -import logoYue from '@/images/logos/yue.svg' -import logoSonr from '@/images/logos/sonr.svg' - -const projects = [ - { - name: 'Sonr', - created: '2020 - Present', - description: - 'IBC-enabled blockchain for decentralized identity. Features passkey-based accounts, DKLS-MPC wallets, and 600ms wallet generation.', - link: { href: 'https://sonr.io', label: 'sonr.io' }, - logo: logoSonr, - }, - { - name: 'DID & WebAuthn Standards', - created: '2021 - Present', - description: - 'Contributing to W3C Working Groups for DIDs, WebAuthn, and WASM standards that define the future of digital identity.', - link: { href: 'https://www.w3.org/TR/did-core/', label: 'w3.org' }, - logo: logoYue, - }, - // { - // name: 'ML Livestock Detection', - // description: - // 'Real-time video streaming library, optimized for interstellar transmission.', - // link: { href: '#', label: 'github.com' }, - // logo: logoHelioStream, - // }, - // { - // name: 'AR Whiteboard', - // description: - // 'The operating system that powers our Sonr space shuttles.', - // link: { href: '#', label: 'github.com' }, - // logo: logoCosmos, - // }, - { - name: 'Spacebolt', - created: '2017 - 2018', - description: - 'Unity-based mobile game featuring innovative physics-based gameplay. Part of my journey in mobile development.', - link: { href: 'https://github.com/prnk28', label: 'github.com' }, - logo: logoSpacebolt, - }, - { - name: 'VolunTree', - created: '2015 - 2016', - description: - 'iOS app for tracking volunteer hours and connecting volunteers with organizations. Simplified community service engagement.', - link: { href: 'https://github.com/prnk28', label: 'github.com' }, - logo: logoVoluntree, - }, - { - name: 'Superball', - created: '2010 - 2011', - description: - 'One of the first 10,000 apps published on the App Store. A physics-based game that started my journey at age 12.', - link: { href: 'https://github.com/prnk28', label: 'github.com' }, - logo: logoSuperball, - }, -] - -function LinkIcon(props: React.ComponentPropsWithoutRef<'svg'>) { - return ( - - ) -} - -export const metadata: Metadata = { - title: 'Projects', - description: 'Blockchain innovations and decentralized identity solutions I\'ve built to empower users.', -} - -export default function Projects() { - return ( - -
      - {projects.map((project) => ( - -
      - -
      -

      - {project.name} -

      - {project.description} -

      - - {project.link.label} -

      -
      - ))} -
    -
    - ) -} diff --git a/src/app/providers.tsx b/src/app/providers.tsx deleted file mode 100644 index c1ef327..0000000 --- a/src/app/providers.tsx +++ /dev/null @@ -1,55 +0,0 @@ -'use client' - -import { createContext, useEffect, useRef } from 'react' -import { usePathname } from 'next/navigation' -import { ThemeProvider, useTheme } from 'next-themes' - -function usePrevious(value: T) { - let ref = useRef() - - useEffect(() => { - ref.current = value - }, [value]) - - return ref.current -} - -function ThemeWatcher() { - let { resolvedTheme, setTheme } = useTheme() - - useEffect(() => { - let media = window.matchMedia('(prefers-color-scheme: dark)') - - function onMediaChange() { - let systemTheme = media.matches ? 'dark' : 'light' - if (resolvedTheme === systemTheme) { - setTheme('system') - } - } - - onMediaChange() - media.addEventListener('change', onMediaChange) - - return () => { - media.removeEventListener('change', onMediaChange) - } - }, [resolvedTheme, setTheme]) - - return null -} - -export const AppContext = createContext<{ previousPathname?: string }>({}) - -export function Providers({ children }: { children: React.ReactNode }) { - let pathname = usePathname() - let previousPathname = usePrevious(pathname) - - return ( - - - - {children} - - - ) -} diff --git a/src/app/speaking/page.tsx b/src/app/speaking/page.tsx deleted file mode 100644 index 5e1d7c2..0000000 --- a/src/app/speaking/page.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import { type Metadata } from 'next' - -import { Card } from '@/components/Card' -import { Section } from '@/components/Section' -import { SimpleLayout } from '@/components/SimpleLayout' - -function SpeakingSection({ - children, - ...props -}: React.ComponentPropsWithoutRef) { - return ( -
    -
    {children}
    -
    - ) -} - -function Appearance({ - title, - description, - event, - cta, - href, -}: { - title: string - description: string - event: string - cta: string - href: string -}) { - return ( - - - {title} - - {event} - {description} - {cta} - - ) -} - -export const metadata: Metadata = { - title: 'Speaking', - description: - 'Speaking at prestigious institutions and conferences about blockchain, decentralized identity, and the future of the web.', -} - -export default function Speaking() { - return ( - -
    - - - - - - - - - - -
    -
    - ) -} diff --git a/src/app/thank-you/page.tsx b/src/app/thank-you/page.tsx deleted file mode 100644 index 0d2e3bd..0000000 --- a/src/app/thank-you/page.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { type Metadata } from 'next' - -import { SimpleLayout } from '@/components/SimpleLayout' - -export const metadata: Metadata = { - title: 'You\'re subscribed', - description: 'Thanks for subscribing to my newsletter.', -} - -export default function ThankYou() { - return ( - - ) -} diff --git a/src/app/uses/page.tsx b/src/app/uses/page.tsx deleted file mode 100644 index 466b057..0000000 --- a/src/app/uses/page.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import { Card } from '@/components/Card' -import { Section } from '@/components/Section' -import { SimpleLayout } from '@/components/SimpleLayout' - -function ToolsSection({ - children, - ...props -}: React.ComponentPropsWithoutRef) { - return ( -
    -
      - {children} -
    -
    - ) -} - -function Tool({ - title, - href, - children, -}: { - title: string - href?: string - children: React.ReactNode -}) { - return ( - - - {title} - - {children} - - ) -} - -export const metadata = { - title: 'Uses', - description: 'Tools and technologies I use for blockchain development, building Sonr, and staying productive.', -} - -export default function Uses() { - return ( - -
    - - - When you\'re compiling blockchain nodes and running multiple test networks locally, - RAM is everything. This machine handles everything I throw at it, from Rust compilation - to running full Cosmos SDK nodes. - - - Dual 5K displays give me the screen real estate I need for coding, monitoring - blockchain metrics, and keeping up with the constant stream of GitHub notifications - from maintaining one of the world\'s most active contribution streaks. - - - Mechanical keyboards aren\'t just for gaming. The tactile feedback helps me maintain - accuracy during long coding sessions, crucial when every character matters in smart contracts. - - - After years of 12+ hour coding days, investing in proper ergonomics isn\'t optional. - This chair has been perfect for those long sessions building Sonr\'s infrastructure. - - - - - Essential for Cosmos SDK development. The Rust analyzer extension is particularly - crucial for blockchain development where type safety can prevent costly errors. - - - The AI-powered terminal that understands context. Perfect for managing multiple - blockchain nodes, SSH sessions, and the complex command sequences involved in - Cosmos SDK development. - - - Running local testnets and managing blockchain infrastructure requires serious - containerization. Docker for local development, K8s for production deployments. - - - The best Kubernetes IDE I\'ve found. Essential for managing Sonr\'s infrastructure - across multiple environments and monitoring our validator nodes. - - - The entire Cosmos SDK toolkit is essential for building IBC-enabled chains. - From Ignite CLI to CosmWasm, these tools form the backbone of Sonr\'s development. - - - - - The premier wallet for Cosmos ecosystem development. Essential for testing - IBC transactions and interacting with Sonr\'s testnet. - - - While Sonr uses Cosmos SDK, understanding EVM is crucial. Remix helps me - stay current with Ethereum development and test cross-chain scenarios. - - - Since Sonr integrates IPFS for distributed storage, having a local IPFS - node is essential for development and testing. - - - API testing is crucial when building blockchain infrastructure. Postman - helps me test our REST and gRPC endpoints thoroughly. - - - - - Designing intuitive blockchain UX requires constant iteration. Figma helps - us prototype wallet interfaces and visualize complex identity flows. - - - Perfect for sketching blockchain architectures and explaining complex - technical concepts. Most of our technical documentation starts here. - - - Our entire company knowledge base lives in Notion. From technical specs - to meeting notes, it\'s our single source of truth. - - - - - More than just an app launcher - it\'s my command center. Custom scripts - for blockchain operations, quick access to documentation, and AI features - for code generation. - - - Issue tracking designed for modern software teams. Perfect for managing - Sonr\'s development across multiple repositories and coordinating with our - distributed team. - - - Open-source scheduling that respects privacy. Important when you\'re building - privacy-first technology and need to practice what you preach. - - - Where the blockchain community lives. Essential for staying connected with - the Cosmos ecosystem and supporting our developer community. - - - AI pair programming at its finest. Particularly helpful when working with - new Cosmos SDK modules or implementing complex cryptographic functions. - - -
    -
    - ) -} \ No newline at end of file diff --git a/src/images/avatar.jpg b/src/images/avatar.jpg deleted file mode 100644 index b0a6963..0000000 Binary files a/src/images/avatar.jpg and /dev/null differ diff --git a/src/images/logos/airbnb.svg b/src/images/logos/airbnb.svg deleted file mode 100644 index aab81e3..0000000 --- a/src/images/logos/airbnb.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - diff --git a/src/images/logos/animaginary.svg b/src/images/logos/animaginary.svg deleted file mode 100644 index ddea3ce..0000000 --- a/src/images/logos/animaginary.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/images/logos/cosmos.svg b/src/images/logos/cosmos.svg deleted file mode 100644 index 1a4a63f..0000000 --- a/src/images/logos/cosmos.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/images/logos/facebook.svg b/src/images/logos/facebook.svg deleted file mode 100644 index d5eaf5d..0000000 --- a/src/images/logos/facebook.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/images/logos/helio-stream.svg b/src/images/logos/helio-stream.svg deleted file mode 100644 index 35cc192..0000000 --- a/src/images/logos/helio-stream.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/images/logos/open-shuttle.svg b/src/images/logos/open-shuttle.svg deleted file mode 100644 index 3869ef6..0000000 --- a/src/images/logos/open-shuttle.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/src/images/logos/planetaria.svg b/src/images/logos/planetaria.svg deleted file mode 100644 index 77183b7..0000000 --- a/src/images/logos/planetaria.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/images/logos/sonr.svg b/src/images/logos/sonr.svg deleted file mode 100644 index 562ef2d..0000000 --- a/src/images/logos/sonr.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/images/logos/spacebolt.svg b/src/images/logos/spacebolt.svg deleted file mode 100644 index 2bcb48c..0000000 --- a/src/images/logos/spacebolt.svg +++ /dev/null @@ -1,1887 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/images/logos/starbucks.svg b/src/images/logos/starbucks.svg deleted file mode 100644 index cd80b21..0000000 --- a/src/images/logos/starbucks.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/images/logos/superball.svg b/src/images/logos/superball.svg deleted file mode 100644 index 71a8401..0000000 --- a/src/images/logos/superball.svg +++ /dev/null @@ -1,5014 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/images/logos/voluntree.svg b/src/images/logos/voluntree.svg deleted file mode 100644 index 9aec887..0000000 --- a/src/images/logos/voluntree.svg +++ /dev/null @@ -1,4294 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/images/logos/yue.svg b/src/images/logos/yue.svg deleted file mode 100644 index 7b70de2..0000000 --- a/src/images/logos/yue.svg +++ /dev/null @@ -1,2367 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/images/photos/image-1.jpg b/src/images/photos/image-1.jpg deleted file mode 100644 index 6700186..0000000 Binary files a/src/images/photos/image-1.jpg and /dev/null differ diff --git a/src/images/photos/image-2.jpg b/src/images/photos/image-2.jpg deleted file mode 100644 index 3b18c9b..0000000 Binary files a/src/images/photos/image-2.jpg and /dev/null differ diff --git a/src/images/photos/image-3.jpg b/src/images/photos/image-3.jpg deleted file mode 100644 index 5ae7740..0000000 Binary files a/src/images/photos/image-3.jpg and /dev/null differ diff --git a/src/images/photos/image-4.jpg b/src/images/photos/image-4.jpg deleted file mode 100644 index b4aa318..0000000 Binary files a/src/images/photos/image-4.jpg and /dev/null differ diff --git a/src/images/photos/image-5.jpg b/src/images/photos/image-5.jpg deleted file mode 100644 index bc2acdd..0000000 Binary files a/src/images/photos/image-5.jpg and /dev/null differ diff --git a/src/images/portrait.jpg b/src/images/portrait.jpg deleted file mode 100644 index d7f7d72..0000000 Binary files a/src/images/portrait.jpg and /dev/null differ diff --git a/src/lib/articles.ts b/src/lib/articles.ts deleted file mode 100644 index 662e675..0000000 --- a/src/lib/articles.ts +++ /dev/null @@ -1,36 +0,0 @@ -import glob from 'fast-glob' - -interface Article { - title: string - description: string - author: string - date: string -} - -export interface ArticleWithSlug extends Article { - slug: string -} - -async function importArticle( - articleFilename: string, -): Promise { - let { article } = (await import(`../app/articles/${articleFilename}`)) as { - default: React.ComponentType - article: Article - } - - return { - slug: articleFilename.replace(/(\/page)?\.mdx$/, ''), - ...article, - } -} - -export async function getAllArticles() { - let articleFilenames = await glob('*/page.mdx', { - cwd: './src/app/articles', - }) - - let articles = await Promise.all(articleFilenames.map(importArticle)) - - return articles.sort((a, z) => +new Date(z.date) - +new Date(a.date)) -} diff --git a/src/lib/formatDate.ts b/src/lib/formatDate.ts deleted file mode 100644 index 97462e4..0000000 --- a/src/lib/formatDate.ts +++ /dev/null @@ -1,8 +0,0 @@ -export function formatDate(dateString: string) { - return new Date(`${dateString}T00:00:00Z`).toLocaleDateString('en-US', { - day: 'numeric', - month: 'long', - year: 'numeric', - timeZone: 'UTC', - }) -} diff --git a/typography.ts b/typography.ts deleted file mode 100644 index 31f2939..0000000 --- a/typography.ts +++ /dev/null @@ -1,283 +0,0 @@ -import { type PluginUtils } from 'tailwindcss/types/config' - -export default function typographyStyles({ theme }: PluginUtils) { - return { - invert: { - css: { - '--tw-prose-body': 'var(--tw-prose-invert-body)', - '--tw-prose-headings': 'var(--tw-prose-invert-headings)', - '--tw-prose-links': 'var(--tw-prose-invert-links)', - '--tw-prose-links-hover': 'var(--tw-prose-invert-links-hover)', - '--tw-prose-underline': 'var(--tw-prose-invert-underline)', - '--tw-prose-underline-hover': 'var(--tw-prose-invert-underline-hover)', - '--tw-prose-bold': 'var(--tw-prose-invert-bold)', - '--tw-prose-counters': 'var(--tw-prose-invert-counters)', - '--tw-prose-bullets': 'var(--tw-prose-invert-bullets)', - '--tw-prose-hr': 'var(--tw-prose-invert-hr)', - '--tw-prose-quote-borders': 'var(--tw-prose-invert-quote-borders)', - '--tw-prose-captions': 'var(--tw-prose-invert-captions)', - '--tw-prose-code': 'var(--tw-prose-invert-code)', - '--tw-prose-code-bg': 'var(--tw-prose-invert-code-bg)', - '--tw-prose-pre-code': 'var(--tw-prose-invert-pre-code)', - '--tw-prose-pre-bg': 'var(--tw-prose-invert-pre-bg)', - '--tw-prose-pre-border': 'var(--tw-prose-invert-pre-border)', - '--tw-prose-th-borders': 'var(--tw-prose-invert-th-borders)', - '--tw-prose-td-borders': 'var(--tw-prose-invert-td-borders)', - }, - }, - DEFAULT: { - css: { - '--tw-prose-body': theme('colors.zinc.600'), - '--tw-prose-headings': theme('colors.zinc.900'), - '--tw-prose-links': theme('colors.teal.500'), - '--tw-prose-links-hover': theme('colors.teal.600'), - '--tw-prose-underline': theme('colors.teal.500 / 0.2'), - '--tw-prose-underline-hover': theme('colors.teal.500'), - '--tw-prose-bold': theme('colors.zinc.900'), - '--tw-prose-counters': theme('colors.zinc.900'), - '--tw-prose-bullets': theme('colors.zinc.900'), - '--tw-prose-hr': theme('colors.zinc.100'), - '--tw-prose-quote-borders': theme('colors.zinc.200'), - '--tw-prose-captions': theme('colors.zinc.400'), - '--tw-prose-code': theme('colors.zinc.700'), - '--tw-prose-code-bg': theme('colors.zinc.300 / 0.2'), - '--tw-prose-pre-code': theme('colors.zinc.100'), - '--tw-prose-pre-bg': theme('colors.zinc.900'), - '--tw-prose-pre-border': 'transparent', - '--tw-prose-th-borders': theme('colors.zinc.200'), - '--tw-prose-td-borders': theme('colors.zinc.100'), - - '--tw-prose-invert-body': theme('colors.zinc.400'), - '--tw-prose-invert-headings': theme('colors.zinc.200'), - '--tw-prose-invert-links': theme('colors.teal.400'), - '--tw-prose-invert-links-hover': theme('colors.teal.400'), - '--tw-prose-invert-underline': theme('colors.teal.400 / 0.3'), - '--tw-prose-invert-underline-hover': theme('colors.teal.400'), - '--tw-prose-invert-bold': theme('colors.zinc.200'), - '--tw-prose-invert-counters': theme('colors.zinc.200'), - '--tw-prose-invert-bullets': theme('colors.zinc.200'), - '--tw-prose-invert-hr': theme('colors.zinc.700 / 0.4'), - '--tw-prose-invert-quote-borders': theme('colors.zinc.500'), - '--tw-prose-invert-captions': theme('colors.zinc.500'), - '--tw-prose-invert-code': theme('colors.zinc.300'), - '--tw-prose-invert-code-bg': theme('colors.zinc.200 / 0.05'), - '--tw-prose-invert-pre-code': theme('colors.zinc.100'), - '--tw-prose-invert-pre-bg': 'rgb(0 0 0 / 0.4)', - '--tw-prose-invert-pre-border': theme('colors.zinc.200 / 0.1'), - '--tw-prose-invert-th-borders': theme('colors.zinc.700'), - '--tw-prose-invert-td-borders': theme('colors.zinc.800'), - - // Base - color: 'var(--tw-prose-body)', - lineHeight: theme('lineHeight.7'), - '> *': { - marginTop: theme('spacing.10'), - marginBottom: theme('spacing.10'), - }, - p: { - marginTop: theme('spacing.7'), - marginBottom: theme('spacing.7'), - }, - - // Headings - 'h2, h3': { - color: 'var(--tw-prose-headings)', - fontWeight: theme('fontWeight.semibold'), - }, - h2: { - fontSize: theme('fontSize.xl')[0], - lineHeight: theme('lineHeight.7'), - marginTop: theme('spacing.20'), - marginBottom: theme('spacing.4'), - }, - h3: { - fontSize: theme('fontSize.base')[0], - lineHeight: theme('lineHeight.7'), - marginTop: theme('spacing.16'), - marginBottom: theme('spacing.4'), - }, - ':is(h2, h3) + *': { - marginTop: 0, - }, - - // Images - img: { - borderRadius: theme('borderRadius.3xl'), - }, - - // Inline elements - a: { - color: 'var(--tw-prose-links)', - fontWeight: theme('fontWeight.semibold'), - textDecoration: 'underline', - textDecorationColor: 'var(--tw-prose-underline)', - transitionProperty: 'color, text-decoration-color', - transitionDuration: theme('transitionDuration.150'), - transitionTimingFunction: theme('transitionTimingFunction.in-out'), - }, - 'a:hover': { - color: 'var(--tw-prose-links-hover)', - textDecorationColor: 'var(--tw-prose-underline-hover)', - }, - strong: { - color: 'var(--tw-prose-bold)', - fontWeight: theme('fontWeight.semibold'), - }, - code: { - display: 'inline-block', - color: 'var(--tw-prose-code)', - fontSize: theme('fontSize.sm')[0], - fontWeight: theme('fontWeight.semibold'), - backgroundColor: 'var(--tw-prose-code-bg)', - borderRadius: theme('borderRadius.lg'), - paddingLeft: theme('spacing.1'), - paddingRight: theme('spacing.1'), - }, - 'a code': { - color: 'inherit', - }, - ':is(h2, h3) code': { - fontWeight: theme('fontWeight.bold'), - }, - - // Quotes - blockquote: { - paddingLeft: theme('spacing.6'), - borderLeftWidth: theme('borderWidth.2'), - borderLeftColor: 'var(--tw-prose-quote-borders)', - fontStyle: 'italic', - }, - - // Figures - figcaption: { - color: 'var(--tw-prose-captions)', - fontSize: theme('fontSize.sm')[0], - lineHeight: theme('lineHeight.6'), - marginTop: theme('spacing.3'), - }, - 'figcaption > p': { - margin: 0, - }, - - // Lists - ul: { - listStyleType: 'disc', - }, - ol: { - listStyleType: 'decimal', - }, - 'ul, ol': { - paddingLeft: theme('spacing.6'), - }, - li: { - marginTop: theme('spacing.6'), - marginBottom: theme('spacing.6'), - paddingLeft: theme('spacing[3.5]'), - }, - 'li::marker': { - fontSize: theme('fontSize.sm')[0], - fontWeight: theme('fontWeight.semibold'), - }, - 'ol > li::marker': { - color: 'var(--tw-prose-counters)', - }, - 'ul > li::marker': { - color: 'var(--tw-prose-bullets)', - }, - 'li :is(ol, ul)': { - marginTop: theme('spacing.4'), - marginBottom: theme('spacing.4'), - }, - 'li :is(li, p)': { - marginTop: theme('spacing.3'), - marginBottom: theme('spacing.3'), - }, - - // Code blocks - pre: { - color: 'var(--tw-prose-pre-code)', - fontSize: theme('fontSize.sm')[0], - fontWeight: theme('fontWeight.medium'), - backgroundColor: 'var(--tw-prose-pre-bg)', - borderRadius: theme('borderRadius.3xl'), - padding: theme('spacing.8'), - overflowX: 'auto', - border: '1px solid', - borderColor: 'var(--tw-prose-pre-border)', - }, - 'pre code': { - display: 'inline', - color: 'inherit', - fontSize: 'inherit', - fontWeight: 'inherit', - backgroundColor: 'transparent', - borderRadius: 0, - padding: 0, - }, - - // Horizontal rules - hr: { - marginTop: theme('spacing.20'), - marginBottom: theme('spacing.20'), - borderTopWidth: '1px', - borderColor: 'var(--tw-prose-hr)', - '@screen lg': { - marginLeft: `calc(${theme('spacing.12')} * -1)`, - marginRight: `calc(${theme('spacing.12')} * -1)`, - }, - }, - - // Tables - table: { - width: '100%', - tableLayout: 'auto', - textAlign: 'left', - fontSize: theme('fontSize.sm')[0], - }, - thead: { - borderBottomWidth: '1px', - borderBottomColor: 'var(--tw-prose-th-borders)', - }, - 'thead th': { - color: 'var(--tw-prose-headings)', - fontWeight: theme('fontWeight.semibold'), - verticalAlign: 'bottom', - paddingBottom: theme('spacing.2'), - }, - 'thead th:not(:first-child)': { - paddingLeft: theme('spacing.2'), - }, - 'thead th:not(:last-child)': { - paddingRight: theme('spacing.2'), - }, - 'tbody tr': { - borderBottomWidth: '1px', - borderBottomColor: 'var(--tw-prose-td-borders)', - }, - 'tbody tr:last-child': { - borderBottomWidth: 0, - }, - 'tbody td': { - verticalAlign: 'baseline', - }, - tfoot: { - borderTopWidth: '1px', - borderTopColor: 'var(--tw-prose-th-borders)', - }, - 'tfoot td': { - verticalAlign: 'top', - }, - ':is(tbody, tfoot) td': { - paddingTop: theme('spacing.2'), - paddingBottom: theme('spacing.2'), - }, - ':is(tbody, tfoot) td:not(:first-child)': { - paddingLeft: theme('spacing.2'), - }, - ':is(tbody, tfoot) td:not(:last-child)': { - paddingRight: theme('spacing.2'), - }, - }, - }, - } -}