A full-stack property listing platform built with AWS Amplify Gen2, featuring passwordless authentication, image uploads, and relational data management.
- Passwordless Authentication: Native Cognito EMAIL_OTP - no passwords, just email codes!
- Property Management: Create, read, update, and delete property listings
- Image Upload: Upload multiple property images using Amplify Storage FileUploader
- Relational Data: Properties linked to users, images, and features
- Public & Private Access: Guest users can browse, authenticated users can list properties
- Secure & Simple: Built-in rate limiting, code expiration, and brute force protection
- Frontend: React + TypeScript + Vite
- Backend: AWS Amplify Gen2
- Authentication: Amazon Cognito (passwordless email)
- Database: AWS AppSync + DynamoDB
- Storage: Amazon S3
- UI Components: Amplify UI React
- Email, name, phone
- Has many properties
- Title, description, price, address
- Bedrooms, bathrooms, square feet
- Property type (house, apartment, condo, etc.)
- Status (available, pending, sold, rented)
- Belongs to user
- Has many images and features
- Image key (S3 reference)
- Caption, primary flag, order
- Belongs to property
- Feature name and category
- Belongs to property
- Node.js 18+ installed
- AWS account (SES sandbox mode works for development)
- Amplify CLI installed:
npm install -g @aws-amplify/cli
See SETUP.md for detailed setup instructions.
- Install dependencies:
npm install- Deploy the Amplify backend:
npx ampx sandbox- Start the development server:
npm run dev- Open your browser to
http://localhost:5173
Note: For development, verify your email in the SES Console since AWS accounts start in sandbox mode. For production, request SES production access.
- Enter your email address (no password needed!)
- New users: Enter your name to create an account
- Check your email for an 8-digit verification code
- Enter the code to authenticate
- You're in!
- View all available properties
- See property details, images, and pricing
- Filter by status and type
- Click "List Property"
- Fill in property details
- Upload property images using the FileUploader
- Submit to create the listing
- View your own properties
- Update property details
- Upload additional images
- Change property status
- Guest users: Can read all properties
- Authenticated users: Can read all properties and create their own
- Property owners: Full CRUD access to their own properties
- Public bucket: Property images accessible to all users
- Protected paths: User-specific uploads with read access for authenticated users
To deploy to production:
npx ampx pipeline-deploy --branch main --app-id <your-app-id>MIT