# Geek-Life v2.0 - Multi-Tenant CLI Task Manager
## 🚀 What's New in v2.0
- **Multi-Tenant Support**: Multiple organizations can use the same instance
- **User Management**: Multiple users per tenant with secure authentication
- **PostgreSQL Backend**: Centralized database with better performance and reliability
- **Session Management**: Secure login/logout with session tokens
- **Database Migrations**: Automated schema management
- **Row-Level Security**: Data isolation between tenants
## 🏗️ Architecture
### Multi-Tenant Design
- **Tenants**: Organizations or teams
- **Users**: Individual users within a tenant
- **Projects & Tasks**: Scoped to specific users within tenants
- **Sessions**: Secure authentication tokens
### Database Schema
- PostgreSQL with Row-Level Security (RLS)
- Automated migrations
- Optimized indexes for performance
- UUID support for external integrations
## 🛠️ Installation & Setup
### Prerequisites
- Go 1.19 or later
- PostgreSQL 12 or later
### Database Setup
1. Create a PostgreSQL database:
```sql
CREATE DATABASE geeklife;
```
2. Copy the environment configuration:
```bash
cp .env.example .env
```
3. Update `.env` with your database credentials:
```env
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=your_password
DB_NAME=geeklife
DB_SSLMODE=disable
```
### Build & Run
```bash
# Install dependencies
go mod tidy
# Run database migrations
go run app/*.go --migrate
# Start the application
go run app/*.go
```
## 🔐 Authentication
### First Time Setup
1. **Register Tenant**: Create a new organization/tenant with an admin user
2. **Register User**: Add additional users to an existing tenant
3. **Login**: Access with existing credentials
### Session Management
- Sessions are automatically saved locally
- Use `Ctrl+L` to logout
- Sessions expire after 24 hours (configurable)
## 🎮 Usage
### Keyboard Shortcuts
- `Tab` / `Shift+Tab`: Navigate between panes
- `Enter`: Select/Edit item
- `Ctrl+C`: Quit application
- `Ctrl+L`: Logout
- `Esc`: Cancel/Go back
### Multi-User Workflow
1. **Tenant Admin**: Registers the tenant and becomes the first user
2. **Team Members**: Register as users within the existing tenant
3. **Data Isolation**: Each user sees only their own projects and tasks
4. **Collaboration**: Future versions will support shared projects
## 🔧 Configuration
### Environment Variables
```env
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=your_password
DB_NAME=geeklife
DB_SSLMODE=disable
# Authentication Configuration
JWT_SECRET=your-super-secret-jwt-key
SESSION_DURATION=24
# Application Configuration
ENVIRONMENT=development
LOG_LEVEL=info
```
### Command Line Options
```bash
# Run database migrations
./geek-life --migrate
# Help
./geek-life --help
```
## 🗄️ Database Migrations
The application includes an automated migration system:
```bash
# Run all pending migrations
go run app/*.go --migrate
```
Migrations are located in the `migrations/` directory and are automatically applied in order.
## 🔒 Security Features
- **Password Hashing**: bcrypt with salt
- **Session Tokens**: Cryptographically secure random tokens
- **Row-Level Security**: Database-level tenant isolation
- **SQL Injection Protection**: Parameterized queries
- **Session Expiration**: Configurable session timeouts
## 🏢 Multi-Tenant Benefits
- **Cost Effective**: Single instance serves multiple organizations
- **Data Isolation**: Complete separation between tenants
- **Scalable**: Supports unlimited tenants and users
- **Secure**: Row-level security ensures data privacy
- **Maintainable**: Single codebase for all tenants
## 🔄 Migration from v1.0
The new version maintains backward compatibility with the Storm database format. You can:
1. Continue using Storm (single-user mode)
2. Migrate to PostgreSQL for multi-tenant features
3. Run both versions side by side
## 🚧 Development
### Project Structure
```
├── app/ # Main application and UI components
├── auth/ # Authentication service
├── config/ # Configuration management
├── migration/ # Database migration system
├── model/ # Data models
├── repository/ # Data access layer
│ ├── postgres/ # PostgreSQL implementations
│ └── storm/ # Storm implementations (legacy)
├── util/ # Utility functions
├── migrations/ # SQL migration files
└── docs/ # Documentation
```
### Adding New Features
1. Update models if needed
2. Add repository methods
3. Update UI components
4. Create migrations for schema changes
## 📝 License
MIT License - see LICENSE file for details.
## 🤝 Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
## 📞 Support
- Create an issue for bug reports
- Use discussions for feature requests
- Check the wiki for detailed documentation
---
**Geek-Life v2.0** - Now with multi-tenant support for teams and organizations! 🚀