A platform for turning special life moments into NFTs. Built with Laravel (Backend), Vue.js (Frontend), and Laravel Nova (Admin Panel).
Eternal Moments allows users to create, mint, and sell NFTs from their precious life moments. The platform supports images, videos, and audio files, with integrated payment processing through both cryptocurrency wallets and credit cards.
- User Registration & Authentication: Separate roles for creators and buyers
- NFT Creation: Upload images, videos, or audio files
- NFT Minting: Mint NFTs on the blockchain via Venly API
- NFT Marketplace: Browse and purchase NFTs
- Wallet Integration: Connect MetaMask and other Web3 wallets
- Payment Options: Pay with crypto or credit card (Stripe)
- Dashboard: Track NFT performance, views, and earnings
- Shareable Links: Unique shareable URLs for each NFT
- User Management: View and manage all users
- NFT Management: Monitor all NFTs and their status
- Transaction Tracking: View all platform transactions
- Wallet Management: Oversee connected wallets
- Framework: Laravel 10
- Database: MySQL (AWS RDS)
- Authentication: Laravel Sanctum
- Admin Panel: Laravel Nova
- Storage: AWS S3
- NFT API: Venly
- Payment: Stripe
- Framework: Vue.js 3
- Build Tool: Vite
- State Management: Pinia
- Routing: Vue Router
- Styling: Tailwind CSS
- Web3: Ethers.js
- HTTP Client: Axios
- Backend Hosting: AWS EC2
- Frontend Hosting: AWS Amplify
- File Storage: AWS S3
- Database: AWS RDS
NFT-idea/
├── backend/ # Laravel backend
│ ├── app/
│ │ ├── Http/
│ │ │ └── Controllers/ # API controllers
│ │ ├── Models/ # Eloquent models
│ │ ├── Services/ # Business logic services
│ │ └── Nova/ # Laravel Nova resources
│ ├── database/
│ │ └── migrations/ # Database migrations
│ ├── routes/
│ │ └── api.php # API routes
│ └── config/ # Configuration files
│
└── frontend/ # Vue.js frontend
├── src/
│ ├── components/ # Vue components
│ ├── views/ # Page components
│ ├── stores/ # Pinia stores
│ ├── services/ # API services
│ └── router/ # Vue Router config
└── public/ # Static assets
- PHP 8.1+
- Composer
- Node.js 18+
- MySQL 8.0+
- AWS Account
- Stripe Account
- Venly Account
- Navigate to the backend directory:
cd backend- Install dependencies:
composer install- Copy environment file:
cp .env.example .env-
Configure your
.envfile with:- Database credentials
- AWS credentials (S3, RDS)
- Stripe API keys
- Venly API credentials
- Frontend URL
-
Generate application key:
php artisan key:generate- Run migrations:
php artisan migrate- Install Laravel Nova (requires license):
composer require laravel/nova
php artisan nova:install- Start the development server:
php artisan serve- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install- Copy environment file:
cp .env.example .env- Configure your
.envfile:
VITE_API_URL=http://localhost:8000/api
VITE_STRIPE_PUBLIC_KEY=your_stripe_public_key
VITE_APP_URL=http://localhost:3000- Start the development server:
npm run devThe application will be available at:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000/api
- Admin Panel: http://localhost:8000/nova
POST /api/register
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com",
"password": "password123",
"password_confirmation": "password123",
"user_type": "creator"
}POST /api/login
Content-Type: application/json
{
"email": "john@example.com",
"password": "password123"
}POST /api/logout
Authorization: Bearer {token}GET /api/nfts?status=listed&occasion=weddingGET /api/nfts/{id}GET /api/nfts/share/{shareUrl}POST /api/nfts
Authorization: Bearer {token}
Content-Type: multipart/form-data
{
"title": "My Wedding Day",
"description": "Our special moment",
"media_type": "image",
"media_file": [file],
"occasion": "wedding",
"price": 0.5,
"currency": "ETH"
}POST /api/nfts/{id}/mint
Authorization: Bearer {token}PUT /api/nfts/{id}
Authorization: Bearer {token}
{
"title": "Updated Title",
"price": 1.0
}POST /api/nfts/{nftId}/purchase
Authorization: Bearer {token}
{
"payment_method": "crypto",
"wallet_address": "0x..."
}GET /api/transactions
Authorization: Bearer {token}POST /api/wallets/connect
Authorization: Bearer {token}
{
"address": "0x...",
"blockchain": "MATIC",
"wallet_type": "metamask"
}GET /api/wallets
Authorization: Bearer {token}- Launch an EC2 instance (Ubuntu 22.04 recommended)
- Install PHP, Composer, and required extensions
- Clone the repository
- Configure environment variables
- Set up nginx or Apache
- Configure SSL with Let's Encrypt
- Run migrations and seed data
- Connect your Git repository to AWS Amplify
- Configure build settings:
version: 1
frontend:
phases:
preBuild:
commands:
- cd frontend
- npm install
build:
commands:
- npm run build
artifacts:
baseDirectory: frontend/dist
files:
- '**/*'
cache:
paths:
- frontend/node_modules/**/*- Set environment variables in Amplify console
- Deploy
- Create a MySQL RDS instance
- Configure security groups
- Update backend
.envwith RDS credentials - Run migrations
- Create an S3 bucket
- Configure CORS policy
- Set up IAM user with S3 access
- Update backend
.envwith S3 credentials
APP_NAME="Eternal Moments"
APP_ENV=production
APP_KEY=
APP_URL=https://api.eternalmoments.com
DB_CONNECTION=mysql
DB_HOST=your-rds-endpoint
DB_DATABASE=eternal_moments
DB_USERNAME=your_db_user
DB_PASSWORD=your_db_password
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your-bucket-name
STRIPE_KEY=
STRIPE_SECRET=
STRIPE_WEBHOOK_SECRET=
VENLY_API_KEY=
VENLY_API_SECRET=
VENLY_ENVIRONMENT=production
VENLY_CHAIN=MATIC
FRONTEND_URL=https://eternalmoments.comVITE_API_URL=https://api.eternalmoments.com/api
VITE_STRIPE_PUBLIC_KEY=pk_live_...
VITE_APP_URL=https://eternalmoments.comcd backend
php artisan testcd frontend
npm run test- All API routes are protected with Laravel Sanctum authentication
- File uploads are validated and sanitized
- CORS is configured to only allow requests from the frontend domain
- Stripe webhooks are verified using webhook signatures
- Sensitive data is encrypted in the database
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is proprietary software. All rights reserved.
For support, email support@eternalmoments.com or visit our help center.
- Laravel Framework
- Vue.js
- Venly NFT API
- Stripe Payment Processing
- AWS Cloud Services