A modern, feature-rich project management platform built with React, TypeScript, and Firebase, designed for architecture and design firms to manage projects, teams, and freelancers.
- Overview
- Features
- Tech Stack
- Getting Started
- Development
- Testing
- Building for Production
- User Roles & Permissions
- Key Features Deep Dive
- Contributing
- Troubleshooting
- License
Architex Axis is a comprehensive project management solution specifically designed for architecture and design firms. It provides role-based dashboards for administrators, freelancers, and clients, enabling seamless collaboration, time tracking, file management, and project oversight.
The platform has been migrated to use shadcn/ui components, providing a modern, accessible, and highly customizable user interface built on top of Radix UI primitives and styled with Tailwind CSS.
- Role-Based Access Control: Three distinct user roles (Admin, Freelancer, Client) with tailored dashboards and permissions
- Project Management: Create, track, and manage projects with job cards, milestones, and deliverables
- Time Tracking: Built-in timer system for freelancers to track billable hours
- Team Collaboration: Real-time messaging, file sharing, and project updates
- File Management: Secure document storage and sharing with version control
- Analytics & Reporting: Comprehensive dashboards with performance metrics and insights
- User Management: Admin panel for managing users, roles, and permissions
- Activity Monitoring: Track user activities and system usage
- User management and role assignment
- System-wide analytics and performance monitoring
- Activity monitoring across all projects
- Project oversight and budget tracking
- Report generation (cost reports, performance metrics)
- Project assignments and task management
- Time tracking with start/stop timers
- Earnings dashboard with payment history
- Project applications and proposals
- Weekly time logs and statistics
- Performance metrics
- Active project overview
- Real-time project updates
- Secure document access
- Direct messaging with project teams
- Budget and timeline tracking
- Project milestones and deliverables
- Dark Mode Support: System-aware theme switching with manual override
- Responsive Design: Mobile-first design that works on all devices
- Glassmorphism Effects: Modern UI with frosted glass effects
- Bottom Sheets: Mobile-optimized modal experiences
- Skeleton Loading: Smooth loading states for better UX
- Toast Notifications: User-friendly feedback system
- Accessibility: WCAG compliant with keyboard navigation support
- React 18.2.0 - UI framework
- TypeScript 5.2.2 - Type safety
- Vite 5.0 - Build tool and dev server
- React Router 6.22 - Client-side routing
- Tailwind CSS 3.3.5 - Utility-first styling
- shadcn/ui - Component library (built on Radix UI)
- Lucide React - Icon library
- Recharts 3.1.2 - Data visualization
- Firebase 12.4.0
- Authentication - User management
- Firestore - NoSQL database
- Storage - File management
- Emulator Suite - Local development
- React Context API - Global state management
- React Hook Form 7.62 - Form handling
- Zod 4.1 - Schema validation
- ESLint - Code linting
- Stylelint - CSS linting
- Vitest - Unit testing
- Playwright - E2E testing
- TypeScript ESLint - TypeScript linting
- @radix-ui/react-* - Accessible UI primitives
- @hello-pangea/dnd - Drag and drop functionality
- date-fns - Date utilities
- cmdk - Command menu
- sonner - Toast notifications
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- npm (v9 or higher) or yarn
- Git
- Firebase CLI (for deployment and emulator)
# Install Firebase CLI globally
npm install -g firebase-tools- Clone the repository
git clone https://github.com/cp-coder9/axis2.git
cd axis2- Install dependencies
npm install- Set up environment variables
cp .env.example .env.localEdit .env.local and add your Firebase configuration (see Environment Setup).
Create a .env.local file in the root directory with the following variables:
# Firebase Configuration
VITE_FIREBASE_API_KEY=your_api_key_here
VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
VITE_FIREBASE_APP_ID=your_app_id
# Optional: Use Firebase Emulator for development
VITE_USE_FIREBASE_EMULATOR=false-
Create a Firebase Project
- Go to Firebase Console
- Click "Add project" and follow the setup wizard
- Enable Authentication, Firestore, and Storage
-
Get your Firebase config
- In Firebase Console, go to Project Settings
- Under "Your apps", click the web app icon (</>)
- Copy the configuration values to your
.env.local
-
Set up Firestore Security Rules
- Deploy the rules from
firestore.rules:
firebase deploy --only firestore:rules
- Deploy the rules from
-
Set up Firestore Indexes
- Deploy indexes from
firestore.indexes.json:
firebase deploy --only firestore:indexes
- Deploy indexes from
# Start development server (port 3000)
npm run dev
# Start with Firebase Emulator
npm run dev:with-emulator
# Build for production
npm run build
# Preview production build
npm run preview
# Run tests
npm test
# Run tests with UI
npm test:ui
# Run timer-specific tests
npm run test:timer
# Run E2E tests
npm run test:e2e
# Run E2E timer tests
npm run test:e2e:timer
# Lint code
npm run lint
# Lint and fix
npm run lint:fix
# Migrate projects (production)
npm run migrate:projects
# Migrate projects (dry run)
npm run migrate:projects:dry-run
# Validate project data
npm run migrate:projects:validateaxis2/
├── public/ # Static assets
├── src/
│ ├── api/ # API integration
│ │ └── timers/ # Timer API endpoints
│ ├── components/ # React components
│ │ ├── admin/ # Admin-specific components
│ │ ├── analytics/ # Analytics and charts
│ │ ├── auth/ # Authentication components
│ │ ├── charts/ # Chart components
│ │ ├── client/ # Client-specific components
│ │ ├── dashboard/ # Dashboard components
│ │ ├── demos/ # Demo/example components
│ │ ├── file/ # File management
│ │ ├── files/ # Enhanced file management
│ │ ├── freelancer/ # Freelancer-specific components
│ │ ├── messaging/ # Messaging system
│ │ ├── mobile/ # Mobile-optimized components
│ │ ├── navigation/ # Navigation and layouts
│ │ ├── performance/ # Performance monitoring
│ │ ├── profile/ # User profile components
│ │ ├── project/ # Project management components
│ │ ├── theme/ # Theme system
│ │ ├── timer/ # Timer components
│ │ └── ui/ # shadcn/ui components
│ ├── contexts/ # React Context providers
│ │ └── modules/ # Context modules
│ ├── demo/ # Demo pages and components
│ ├── demos/ # Additional demos
│ ├── hooks/ # Custom React hooks
│ ├── lib/ # Utility libraries
│ ├── pages/ # Page components
│ │ └── dashboards/ # Dashboard pages
│ ├── services/ # Business logic and API calls
│ │ ├── dashboard/ # Dashboard services
│ │ ├── messaging/ # Messaging services
│ │ └── websocket/ # WebSocket services
│ ├── tests/ # Test files
│ │ ├── __mocks__/ # Test mocks
│ │ ├── fixtures/ # Test fixtures
│ │ ├── helpers/ # Test helpers
│ │ ├── integration/ # Integration tests
│ │ ├── messaging/ # Messaging tests
│ │ └── timer/ # Timer tests
│ ├── types/ # TypeScript type definitions
│ ├── utils/ # Utility functions
│ │ └── performance/ # Performance utilities
│ ├── App.tsx # Main App component
│ ├── Router.tsx # Application routing
│ ├── firebase.ts # Firebase configuration
│ ├── globals.css # Global styles
│ └── main.tsx # Application entry point
├── tests/ # Additional test files
├── .env.example # Environment variables template
├── .gitignore # Git ignore rules
├── components.json # shadcn/ui configuration
├── eslint.config.js # ESLint configuration
├── firebase.json # Firebase configuration
├── firestore.rules # Firestore security rules
├── firestore.indexes.json # Firestore indexes
├── index.html # HTML entry point
├── package.json # Dependencies and scripts
├── playwright.config.ts # Playwright configuration
├── postcss.config.js # PostCSS configuration
├── tailwind.config.js # Tailwind CSS configuration
├── tsconfig.json # TypeScript configuration
├── vite.config.ts # Vite configuration
└── vitest.config.ts # Vitest configuration
For local development without connecting to production Firebase:
- Install and configure the Firebase Emulator Suite
firebase init emulators- Start the emulators
firebase emulators:start- Run the dev server with emulator
npm run dev:with-emulatorThe emulator UI will be available at http://localhost:4000.
# Run all tests
npm test
# Run with UI
npm test:ui
# Run specific test suite
npm run test:timer# Run E2E tests
npm run test:e2e
# Run timer E2E tests
npm run test:e2e:timersrc/tests/- Test files organized by featuretests/- Additional integration and E2E tests- Coverage reports are generated in
src/tests/coverage/
# Build the application
npm run build
# Preview the production build
npm run previewThe build output will be in the dist/ directory, optimized and ready for deployment.
- Code Splitting: Automatic chunking by route and component
- Tree Shaking: Unused code elimination
- Minification: Terser-based minification
- Asset Optimization: Image and font optimization
- Source Maps: Generated for debugging
- Vendor Chunking: Separate chunks for React, UI libraries, and utilities
Deploy to Firebase Hosting:
firebase deploy --only hostingOr deploy everything:
firebase deployFull system access including:
- User management (create, update, delete users)
- Role assignment and permissions
- Project creation and assignment
- System-wide analytics and reporting
- Activity monitoring
- Budget and resource management
- Application approval/rejection
Project execution and time tracking:
- View assigned projects and tasks
- Track time with built-in timer
- Submit work and deliverables
- Apply for new projects
- View earnings and payment history
- Communicate with clients and team
- Access project files
Project oversight and collaboration:
- View owned projects
- Access project files and documents
- Message project teams
- Track project progress and milestones
- View budget and timeline
- Request updates and changes
- Approve deliverables
- Start/stop/pause timers for job cards
- Automatic time logging to Firestore
- Weekly and monthly time summaries
- Hourly rate calculations
- Time allocation vs. actual tracking
- Timer persistence across sessions
- Hierarchical structure: Projects → Job Cards → Tasks
- Status tracking (Draft, Planning, Active, Completed, On Hold)
- Budget and time allocation
- Team assignment and management
- File attachment and versioning
- Progress tracking and milestones
- Real-time chat between users
- Project-based conversations
- Read receipts and typing indicators
- File sharing in messages
- Call initiation
- Message search and filtering
- Secure cloud storage via Firebase Storage
- File preview and download
- Permission-based access control
- Version control
- File starring and organization
- Bulk operations
- Project performance metrics
- User activity tracking
- Revenue and earnings analytics
- Time utilization reports
- Custom date range filtering
- Export to CSV/PDF
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow the existing code style
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
- Run linting:
npm run lint:fix
Problem: "Firebase not initialized" or connection errors
Solution:
- Check that
.env.localhas correct Firebase credentials - Verify Firebase project is active in console
- Check browser console for specific error messages
- Try clearing browser cache and localStorage
Problem: TypeScript compilation errors
Solution:
# Clean build cache
rm -rf dist node_modules/.vite
npm install
npm run buildProblem: "Port 3000 is already in use"
Solution:
# Kill the process using port 3000 (Linux/Mac)
lsof -ti:3000 | xargs kill -9
# Or use a different port
npm run dev -- --port 3001Problem: Cannot connect to Firebase emulator
Solution:
- Ensure emulator is running:
firebase emulators:start - Check
VITE_USE_FIREBASE_EMULATOR=truein.env.local - Verify emulator ports in
firebase.json - Clear browser cache and reload
Problem: Slow page load or lag
Solution:
- Check browser DevTools Performance tab
- Enable production build optimizations
- Review bundle size with
npm run build - Consider lazy loading heavy components
- Use React DevTools Profiler
- Documentation: Check inline code comments and type definitions
- Issues: Open a GitHub issue for bugs or feature requests
- Firebase Console: Monitor logs and usage in Firebase Console
- Browser DevTools: Use console and network tabs for debugging
This project is licensed under the MIT License - see the LICENSE file for details.
- shadcn/ui - For the excellent component library
- Radix UI - For accessible UI primitives
- Tailwind CSS - For the utility-first CSS framework
- Firebase - For backend infrastructure
- Vite - For the blazing-fast build tool
- React Team - For the amazing framework
Built with ❤️ by the Architex Axis team
For questions or support, please open an issue on GitHub.