This is a personal portfolio project built with TypeScript, React, and Next.js. The project includes a contact form that integrates with Arcjet for email validation and rate limiting, and sends messages to a Discord webhook.
- TypeScript: Strongly typed code for better maintainability and fewer runtime errors.
- React: Component-based architecture for building the user interface.
- Next.js: Server-side rendering and API routes.
- Arcjet: Email validation and rate limiting.
- Discord Webhook: Sends contact form messages to a Discord channel.
- Hero Section: Introduction and links to social profiles.
- About Me Section: Information about the developer and their toolbox.
- Projects Section: Showcases featured projects.
- Contact Section: Contact form for getting in touch.
- Node.js (>= 18.x)
- npm (>= 6.x)
-
Clone the repository:
git clone https://github.com/TheRealMangoAPI/portfolio.git cd portfolio
-
Install dependencies:
npm install
-
Create a
.env.local
file in the root directory and add your environment variables:ARCJET_KEY=your_arcjet_key DISCORD_WEBHOOK_URL=your_discord_webhook_url
npm run dev
Open http://localhost:3000 with your browser to see the result.
src/
: Contains the source code.components/
: React components.sections/
: Section components likeHeroSection
,AboutMeSection
,ProjectsSection
, andContactSection
.
app/
: Next.js routes.api/contact/route.ts
: API route for handling contact form submissions.
schemas/
: Zod schemas for form validation.env.ts
: Environment variable validation using Zod.data/
: Contains data for navigation, projects, and social links.
The HeroSection
component introduces the developer and provides links to social profiles. It is located
in src/components/sections/HeroSection.tsx
.
The AboutMeSection
component provides information about the developer and their toolbox. It is located
in src/components/sections/AboutMeSection.tsx
.
The ProjectsSection
component showcases featured projects. It is located
in src/components/sections/ProjectsSection.tsx
.
The ContactSection
component includes a contact form for getting in touch. It is located
in src/components/sections/ContactSection.tsx
. It uses react-hook-form
for form handling and zod
for schema
validation.
The API route for the contact form is located in src/app/api/contact/route.ts
. It uses Arcjet for email validation and
rate limiting, and sends messages to a Discord webhook.
Contributions are welcome! Please open an issue or submit a pull request.
This project is licensed under the MIT License. See the LICENSE
file for more details.