Skip to content

acarlson33/firepit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

firepit

Version 1.0 - Production Ready πŸŽ‰

WARNING ⚠️ - The tests pass, but only with full environment variable setup. So the tests on the repository will fail. Same with the build.

A modern, open-source chat platform inspired by Discord, built with Next.js 15, Appwrite, and TypeScript. Features real-time messaging, server organization, role-based permissions, and comprehensive moderation tools.

Features

  • Server support - support for servers like on discord
  • Server Invite System - Create, manage, and use invite links with expiration and usage limits
  • Channel support - support for channels like on discord
  • User profiles and status support - missing external integration, but support for in app statuses and profiles
  • Emoji support - Standard and custom emoji support with upload capabilities
  • Moderation - Instance wide moderation and administration
  • Individual server moderation - not currently supported, but will come in a later update with roles

Codebase Features

  • Real-time Chat - WebSocket-based messaging with typing indicators
  • Message Replies - Reply to specific messages to maintain conversation context
  • Server & Channels - Discord-like server organization with multiple channels
  • Server Invites - Shareable invite links with expiration dates, usage limits, and revocation
  • Direct Messages - Private conversations between users
  • User Status - Online/offline presence with custom status messages
  • Emoji Support - Standard emoji picker and custom emoji upload (up to 10MB)
  • Moderation Tools - Soft delete, restore, and hard delete messages with full audit trails
  • Role-Based Access - Admin, moderator, and user roles with granular permissions
  • User Profiles - Customizable profiles with avatar support
  • TypeScript - Full type safety across the entire codebase
  • Next.js 15 - App Router with React Server Components
  • TailwindCSS - Modern, responsive UI design
  • shadcn/ui - High-quality, accessible UI components
  • PWA Ready - Progressive Web App support for mobile installation
  • Comprehensive Tests - 1645 passing tests with extensive coverage
  • Production Ready - Error boundaries, rate limiting, and security hardening

πŸ“‹ Prerequisites

Before you begin, ensure you have:

  • Node.js 18+ or Bun 1.2+ installed
  • An Appwrite instance (cloud or self-hosted):
  • Git for cloning the repository

πŸš€ Quick Start

# 1. Clone the repository
git clone https://github.com/your-org/firepit.git
cd firepit

# 2. Install dependencies
bun install

# 3. Set up environment variables
cp .env.local.example .env.local
nano .env.local  # Edit with your Appwrite credentials

# 4. Validate your configuration
bun run validate-env

# 5. Initialize the database
bun run setup

# 6. Start the development server
bun dev  # Uses Turbopack (~700x faster than Webpack)

Open http://localhost:3000 in your browser to see the application.

Development Commands:

  • bun dev - Start with Turbopack (recommended, ~1.5s cold start)
  • bun dev:webpack - Start with Webpack (fallback, ~12s cold start)
  • bun build - Production build with Turbopack
  • bun build:webpack - Production build with Webpack (fallback)

πŸ“š Documentation

See the /docs folder for detailed guides:

πŸš€ Production Deployment

Firepit is production-ready with:

βœ… Security Hardening

  • Global error boundaries
  • Rate limiting on uploads and API endpoints
  • Secure session management
  • Input validation and sanitization

βœ… Performance Optimization

  • 90%+ improvement in first load times (from 30+ seconds to 2-3 seconds)
  • 85% faster First Contentful Paint (8s β†’ 0.8-1.2s)
  • 50% smaller bundle size (2.5MB β†’ 800KB-1.2MB)
  • Response compression (60-70% bandwidth reduction)
  • Virtual scrolling for large lists
  • Optimized bundle size with code splitting
  • Partial Prerendering (PPR) for instant page loads
  • Aggressive caching for repeat visits (~100ms)

βœ… Monitoring & Observability

  • New Relic APM integration
  • Comprehensive error tracking
  • Performance metrics
  • Audit logging

βœ… Testing & Quality

  • 1644 passing tests
  • Comprehensive test coverage
  • Automated CI/CD pipeline
  • Strict ESLint configuration

See DEPLOYMENT.md for detailed production deployment instructions.

⚠️ Known Limitations

Version 1.1 does not include:

  • Message threading (planned for v1.3)
  • Message pinning (planned for v1.3)
  • Voice/video calls (not currently planned)
  • Native mobile apps (PWA supported)

See ROADMAP.md for the complete feature roadmap.

🀝 Contributing

We welcome contributions! See CONTRIBUTING.md for:

  • Development workflow
  • Code style guidelines
  • Testing requirements
  • Pull request process
  • Issue reporting templates

πŸ—‚οΈ Project Structure

firepit/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/              # Next.js app router pages
β”‚   β”œβ”€β”€ components/       # React components
β”‚   β”œβ”€β”€ lib/              # Utility functions and Appwrite integration
β”‚   └── __tests__/        # Vitest test suites
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ setup-appwrite.ts    # Database initialization script
β”‚   └── validate-env.ts      # Environment validation script
β”œβ”€β”€ public/               # Static assets
β”œβ”€β”€ DEPLOYMENT.md         # Deployment documentation
└── .env.local.example    # Environment variable template

πŸ› οΈ Available Scripts

Command Description
bun dev Start development server (with Turbopack)
bun build Build for production
bun start Start production server
bun run test Run all tests with Vitest
bun run test:coverage Run tests with coverage report
bun lint Check code with ESLint
bun lint:fix Fix auto-fixable linting issues
bun validate-env Validate environment configuration
bun setup Initialize Appwrite database and collections

πŸ”§ Configuration

Environment Variables

The application requires several environment variables. Copy .env.local.example to .env.local and configure:

  • APPWRITE_ENDPOINT - Your Appwrite API endpoint
  • APPWRITE_PROJECT_ID - Your Appwrite project ID
  • APPWRITE_API_KEY - Server-side API key with full permissions

For a complete list and detailed explanations, see DEPLOYMENT.md.

First-Time Setup

  1. Create an Appwrite account and project at appwrite.io
  2. Generate an API key with required scopes (see DEPLOYMENT.md)
  3. Configure environment variables in .env.local
  4. Run validation: bun run validate-env
  5. Initialize database: bun run setup
  6. Start the app: bun dev
  7. Create your account in the UI
  8. Make yourself admin by setting APPWRITE_ADMIN_USER_IDS in .env.local

For detailed instructions, see DEPLOYMENT.md.

πŸ› Troubleshooting

Common Issues

  • "Appwrite endpoint not configured" - Check your .env.local file exists and has the correct values
  • "Project not found" - Verify your APPWRITE_PROJECT_ID matches your Appwrite Console
  • "Missing scope" errors - Regenerate your API key with all required permissions
  • Setup script fails - Ensure your API key has databases, collections, attributes, and indexes permissions

For more solutions, see DEPLOYMENT.md - Troubleshooting.

πŸ§ͺ Testing

This project maintains a comprehensive test suite with 100% pass rate:

# Run all tests
bun run test

# Run tests with coverage report
bun run test:coverage

# Run tests in watch mode (during development)
bun run test --watch

Current test coverage: 40.18% statements (growing)

  • 1645 tests passing across 115 test suites
  • Comprehensive API route testing (44 new tests for invite system)
  • Focus on security-critical modules (auth, roles, moderation), and modules critical for function (API routes, hooks, utility files, etc.)

πŸ“¦ Deployment

Vercel (Recommended)

  1. Push your code to GitHub
  2. Import project in Vercel
  3. Add environment variables from .env.local
  4. Deploy!

Self-Hosted

# Build the application
bun build

# Start production server
bun start

For production deployment with Nginx, Docker, or other platforms, see DEPLOYMENT.md - Production Deployment.

🀝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for:

  • Development workflow
  • Code style guidelines
  • Testing requirements
  • Pull request process
  • Issue reporting templates

πŸ“„ License

Licensed under the GNU General Public License (GPL) v3. You can find the License here: License

πŸ™ Acknowledgments

Built with:

πŸ“§ Support

About

Realtime chat app, powered by appwrite. Easy to setup and deploy. Open source discord alternative

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •