# First Run & Setup

<div align="center">
  <img src="../logos/rustelo_dev-logo-h.svg" alt="RUSTELO" width="300" />
</div>

Welcome to your first[Rustelo](/)application! This guide will walk you through setting up and running your application for the first time, ensuring everything is configured correctly and working as expected.

## 🎯 What You'll Accomplish

By the end of this guide, you'll have:

- ✅ **Verified your installation** - Confirmed all tools are working
- ✅ **Started your application** - Both frontend and backend running
- ✅ **Accessed your app** - Connected via web browser
- ✅ **Tested core features** - Authentication, database, and API
- ✅ **Explored the interface** - Understand the user interface
- ✅ **Generated documentation** - Local documentation site running

## 🚀 Quick Start (30 seconds)

If you've already completed the installation, here's the fastest way to get running:

```bash
# Navigate to your project
cd your-rustelo-app

# Start everything
just dev

# Open your browser to:
# http://localhost:3030
```

## 📋 Pre-Run Checklist

Before starting your application, verify these prerequisites:

### 1. Installation Complete
```bash
# Check Rust installation
rustc --version  # Should be 1.70.0 or later
cargo --version

# Check Node.js installation
node --version   # Should be 18.0.0 or later
npm --version

# Check Rustelo tools
cargo leptos --version
mdbook --version
just --version
```

### 2. Project Structure
```bash
# Verify your project has the correct structure
ls -la
# Should see: client/, server/, shared/, book/, justfile, Cargo.toml, etc.
```

### 3. Environment Configuration
```bash
# Check your .env file exists
cat .env
# Should contain: DATABASE_URL, SESSION_SECRET, etc.
```

### 4. Dependencies Installed
```bash
# Install/update dependencies
cargo build
npm install
```

## 🏃‍♂️ Step-by-Step First Run

### Step 1: Verify Setup

First, let's make sure everything is properly configured:

```bash
# Run the setup verification script
just verify-setup

# This checks:
# - All required tools are installed
# - Environment variables are set
# - Database connection works
# - Dependencies are installed
# - Configuration files are valid
```

**Expected Output:**
```
✅ Rust toolchain: 1.70.0
✅ Node.js: 18.17.0
✅ Database connection: OK
✅ Environment variables: OK
✅ Dependencies: OK
✅ Configuration: Valid
🎉 Your[Rustelo](/)setup is ready!
```

### Step 2: Database Setup

Initialize your database with the required schema:

```bash
# Check database status
just db-status

# Run database migrations
just db-migrate

# Verify database setup
just db-health
```

**Expected Output:**
```
📊 Database Status:
- Type: SQLite
- File: database.db
- Size: 32 KB
- Tables: 3 (users, sessions, tasks)
- Migrations: 3 applied
✅ Database is ready!
```

### Step 3: Start the Application

Now start your[Rustelo](/)application:

```bash
# Start the development server
just dev

# Alternative: Start with verbose logging
just dev-verbose

# Alternative: Start on different port
just dev-port 3031
```

**Expected Output:**
```
🚀 Starting[Rustelo](/)Development Server...

📦 Building frontend assets...
   Compiling client v0.1.0
   Finished dev [unoptimized + debuginfo] target(s) in 12.3s

🔧 Starting backend server...
   Compiling server v0.1.0
   Finished dev [unoptimized + debuginfo] target(s) in 8.7s

🌐 Server running on: http://127.0.0.1:3030
🔄 Hot reload enabled on port: 3031
📁 Serving assets from: public/
🗄️ Database: sqlite:database.db

✨ Ready! Your app is running at http://localhost:3030
```

### Step 4: Access Your Application

Open your web browser and navigate to:

**🌐 http://localhost:3030**

You should see:
- **Welcome Page** -[Rustelo](/) landing page
- **Navigation Menu** - Links to different sections
- **Login/Register** - Authentication forms
- **Dashboard** - Main application interface

### Step 5: Test Core Features

Let's test the main features to ensure everything is working:

#### Authentication Test
```bash
# Test authentication endpoints
curl -X POST http://localhost:3030/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "username": "testuser",
    "email": "test@example.com",
    "password": "testpassword123"
  }'
```

**Expected Response:**
```json
{
  "success": true,
  "data": {
    "user_id": 1,
    "username": "testuser",
    "email": "test@example.com"
  },
  "message": "User registered successfully"
}
```

#### Database Test
```bash
# Test database connection
just db-health

# View database tables
just db-status
```

#### API Test
```bash
# Test API health endpoint
curl http://localhost:3030/api/health
```

**Expected Response:**
```json
{
  "status": "healthy",
  "version": "0.1.0",
  "uptime": "00:01:23",
  "database": "connected"
}
```

## 🎨 Start the Documentation Server

Rustelo includes a comprehensive documentation system:

```bash
# Start documentation server (in a new terminal)
just docs-dev

# This starts mdbook server on http://localhost:3000
```

**Expected Output:**
```
📚 Starting Documentation Server...

2024-01-15 10:30:45 [INFO] (mdbook::book): Book building has started
2024-01-15 10:30:45 [INFO] (mdbook::book): Running the html backend
2024-01-15 10:30:45 [INFO] (mdbook::cmd::serve): Serving on: http://localhost:3000
2024-01-15 10:30:45 [INFO] (mdbook::cmd::serve): Press Ctrl+C to quit.

📖 Documentation available at: http://localhost:3000
```

## 🔧 Common First-Run Issues

### Issue 1: Port Already in Use

**Problem:** `Address already in use (os error 48)`

**Solution:**
```bash
# Check what's using the port
lsof -i :3030

# Kill the process or use a different port
just dev-port 3031
```

### Issue 2: Database Connection Failed

**Problem:** `Failed to connect to database`

**Solution:**
```bash
# Check database file exists
ls -la database.db

# Recreate database
just db-reset

# Run migrations
just db-migrate
```

### Issue 3: Missing Dependencies

**Problem:** `Cannot find binary cargo-leptos`

**Solution:**
```bash
# Install missing tools
cargo install cargo-leptos
cargo install sqlx-cli --features sqlite

# Verify installation
just verify-setup
```

### Issue 4: Environment Variables Missing

**Problem:** `Environment variable not found`

**Solution:**
```bash
# Check .env file exists and is correct
cat .env

# Generate new .env file
cp .env.example .env
# Edit .env with your values

# Load environment variables
source .env
```

### Issue 5: Frontend Build Errors

**Problem:** `npm ERR! or webpack compilation failed`

**Solution:**
```bash
# Clean and reinstall
rm -rf node_modules package-lock.json
npm install

# Rebuild CSS
npm run build:css

# Clear cargo cache
cargo clean
```

## 🎯 Your First Actions

Now that your application is running, here's what you should do:

### 1. Create Your First User Account

1. **Go to:** http://localhost:3030/register
2. **Fill in the form:**
   - Username: `your-username`
   - Email: `your-email@example.com`
   - Password: `your-secure-password`
3. **Click:** "Register"
4. **Verify:** You're redirected to the dashboard

### 2. Explore the Interface

Visit these pages to understand your application:

- **Dashboard:** http://localhost:3030/dashboard - Main application view
- **Profile:** http://localhost:3030/profile - User settings
- **Tasks:** http://localhost:3030/tasks - Task management (if enabled)
- **API Docs:** http://localhost:3030/api/docs - API documentation

### 3. Test Authentication

1. **Logout:** Click the logout button
2. **Login:** Use your credentials to log back in
3. **Verify:** Session persistence works correctly

### 4. Check the Database

```bash
# View your user data
just db-query "SELECT * FROM users;"

# Check sessions
just db-query "SELECT * FROM sessions;"
```

### 5. Explore Documentation

Visit http://localhost:3000 and explore:
- **Getting Started** - This guide and more
- **API Reference** - Complete API documentation
- **Features** - Available features and how to use them
- **Development** - How to customize and extend

## 🛠️ Development Workflow

Now that everything is running, here's your daily development workflow:

### Morning Setup
```bash
# Start your development session
cd your-rustelo-app
just dev              # Start app (Terminal 1)
just docs-dev          # Start docs (Terminal 2)
just css-watch         # Watch CSS changes (Terminal 3)
```

### Making Changes
```bash
# Frontend changes (client/)
# - Edit files in client/src/
# - Changes auto-reload in browser

# Backend changes (server/)
# - Edit files in server/src/
# - Server auto-restarts

# Database changes
just db-migration create_new_feature
# - Edit migration file
just db-migrate
```

### Testing Changes
```bash
# Run tests
just test

# Check code quality
just check

# Build for production
just build-prod
```

## 📊 Performance Monitoring

Monitor your application's performance:

### Real-time Metrics
```bash
# View system metrics
just health

# Check memory usage
just monitor-resources

# View logs
just logs
```

### Browser DevTools
1. **Open DevTools** (F12)
2. **Network Tab** - Monitor API calls
3. **Console Tab** - Check for errors
4. **Performance Tab** - Analyze load times

## 🔍 Debugging Tips

### Enable Debug Logging
```bash
# Set debug level in .env
LOG_LEVEL=debug

# Restart server
just dev
```

### Common Debug Commands
```bash
# View detailed logs
just logs-verbose

# Check server health
curl http://localhost:3030/api/health

# Test database queries
just db-query "SELECT COUNT(*) FROM users;"

# Verify configuration
just config-status
```

## 🎉 Success Checklist

Verify your first run was successful:

- [ ] **Application starts without errors**
- [ ] **Web interface loads at http://localhost:3030**
- [ ] **User registration works**
- [ ] **User login works**
- [ ] **Database operations work**
- [ ] **API endpoints respond correctly**
- [ ] **Documentation site loads at http://localhost:3000**
- [ ] **Hot reload works for frontend changes**
- [ ] **Backend restarts on changes**
- [ ] **No errors in console logs**

## 🚀 Next Steps

Congratulations! Your Rustelo application is now running. Here's what to do next:

### Immediate Next Steps (Today)
1. **[Build Your First App](./first-app.md)** - Create a complete application
2. **[Configure Features](./configuration.md)** - Enable additional features
3. **[Explore Components](../developers/components/README.md)** - Learn about available components

### Short-term Goals (This Week)
1. **Customize Styling** - Update colors, fonts, and layout
2. **Add Content** - Create pages and content for your app
3. **Configure Production** - Set up production deployment
4. **Add Features** - Enable email, content management, etc.

### Long-term Goals (This Month)
1. **Deploy to Production** - Launch your app
2. **Set up Monitoring** - Track performance and errors
3. **Add Custom Features** - Build app-specific functionality
4. **Scale Your App** - Optimize for growth

## 🆘 Getting Help

If you encounter issues:

### Quick Fixes
```bash
# Reset everything
just clean-all
just setup

# Verify setup
just verify-setup

# Check logs
just logs
```

### Documentation Resources
- **[Troubleshooting Guide](../troubleshooting/common.md)** - Common issues and solutions
- **[Configuration Guide](../configuration/README.md)** - Advanced configuration options

### Community Support
- **GitHub Issues** - Report bugs and request features
- **Discord Server** - Real-time help and discussion
- **Stack Overflow** - Tag questions with `rustelo`

## 💡 Pro Tips

### Development Efficiency
- **Use `just help`** - See all available commands
- **Keep docs running** - Reference documentation while coding
- **Use hot reload** - Changes appear instantly
- **Check logs regularly** - Catch issues early

### Best Practices
- **Commit often** - Small, frequent commits
- **Test thoroughly** - Use `just test` before commits
- **Monitor performance** - Use `just health` regularly
- **Document changes** - Update documentation as you build

### Security
- **Change default secrets** - Use secure SESSION_SECRET and JWT_SECRET
- **Use HTTPS in production** - Enable TLS feature
- **Keep dependencies updated** - Regular `just update`
- **Monitor security** - Use `just security-audit`

## 🎊 You're Ready!

Your[Rustelo](/) application is now running successfully! You have:

- ✅ **A working web application** with authentication
- ✅ **A development environment** with hot reload
- ✅ **A documentation system** for reference
- ✅ **Database connectivity** for data persistence
- ✅ **API endpoints** for frontend-backend communication
- ✅ **All tools configured** for productive development

**Time to start building something amazing!** 🚀

---

**Next:** Continue with [Building Your First App](./first-app.md) to create a complete application, or explore [Configuration](./configuration.md) to customize your setup.

Happy coding! 🦀✨
