Mark Apodaca's website
| cline_docs | ||
| public | ||
| src | ||
| .dockerignore | ||
| .env | ||
| .gitignore | ||
| docker-compose.dev.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Dockerfile.dev | ||
| jsconfig.json | ||
| next-env.d.ts | ||
| next.config.ts | ||
| package.json | ||
| pnpm-lock.yaml | ||
| postcss.config.js | ||
| README.md | ||
| Resume.txt | ||
| ROADMAP | ||
| tailwind.config.ts | ||
| Tech_Stack | ||
| tsconfig.json | ||
Finlion Website
A modern, responsive business website built with Next.js, featuring a contact form, services showcase, and responsive design.
Features
- Modern, responsive design with Tailwind CSS
- Server-side rendering with Next.js 15+
- Contact form with email integration
- Rate limiting for API routes
- Redis integration for caching and rate limiting
- Docker containerization for both development and production
- Animated UI components with Framer Motion
- Toast notifications system
- Responsive navigation with mobile support
- Services showcase section
- About page
- Contact page with form validation
Technology Stack
Frontend
- Next.js 15.0.4 with App Router
- React 19.0.0
- TypeScript
- Tailwind CSS for styling
- Framer Motion for animations
- HeadlessUI for UI components
- Lucide React & React Icons for icons
Backend
- Next.js API Routes
- Nodemailer for email functionality
- Upstash Redis for rate limiting
- Environment variables management
Development & Build Tools
- PNPM 9.14.2 package manager
- ESLint for code linting
- TypeScript for type safety
- Docker & Docker Compose
- PostCSS & Autoprefixer
Getting Started
Prerequisites
- Node.js 18+ installed
- PNPM package manager
- Docker and Docker Compose (for containerized development)
- Redis (handled through Upstash)
Environment Variables
Create a .env file in the root directory with the following variables:
# Email Configuration
SMTP_HOST=your-smtp-host
SMTP_PORT=your-smtp-port
SMTP_USER=your-smtp-user
SMTP_PASS=your-smtp-password
FROM_EMAIL=your-from-email
TO_EMAIL=your-to-email
# Redis Configuration (for rate limiting)
UPSTASH_REDIS_REST_URL=your-redis-url
UPSTASH_REDIS_REST_TOKEN=your-redis-token
Development Setup
- Install PNPM (if not already installed):
corepack enable && corepack prepare pnpm@latest --activate
- Install dependencies:
pnpm install
- Start the development server:
Using Docker:
docker compose -f docker-compose.dev.yml up
Without Docker:
pnpm dev
The site will be available at http://localhost:3000
Production Deployment
- Build and run using Docker:
docker compose up -d
The production site will be available at http://localhost:805
Project Structure
├── public/ # Static files
│ ├── images/ # Image assets
│ └── ...
├── src/
│ ├── app/ # Next.js app router pages
│ │ ├── api/ # API routes
│ │ ├── about/ # About page
│ │ ├── contact/ # Contact page
│ │ └── services/ # Services page
│ ├── components/ # React components
│ │ ├── home/ # Home page components
│ │ ├── layout/ # Layout components
│ │ ├── providers/ # Context providers
│ │ ├── shared/ # Shared components
│ │ └── ui/ # UI components
│ ├── data/ # Static data
│ ├── lib/ # Utility functions
│ ├── styles/ # Global styles
│ └── types/ # TypeScript types
API Routes
/api/contact- Contact form submission endpoint with rate limiting
Available Scripts
pnpm dev- Start development serverpnpm build- Build production applicationpnpm start- Start production serverpnpm lint- Run ESLint
Docker Configuration
Three Docker Compose configurations are available:
docker-compose.yml- Production deploymentdocker-compose.dev.yml- Development environment with hot reloaddocker-compose.staging.yml- Staging environment
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is proprietary and confidential.