# Sharenet

A full-stack application for managing users and products, built with Rust and Next.js.

## Project Overview

Sharenet is a modern web application that demonstrates clean architecture principles and provides multiple interfaces for data management:

- **Web Interface**: Modern React-based UI with Next.js
- **API**: RESTful HTTP API built with Rust and Axum
- **CLI**: Command-line interface for automation
- **TUI**: Text-based user interface for terminal users

## Tech Stack

### Backend
- **Language**: Rust
- **Framework**: Axum (HTTP), Clap (CLI), Ratatui (TUI)
- **Database**: PostgreSQL (with in-memory option)
- **Architecture**: Clean Architecture with domain-driven design

### Frontend
- **Framework**: Next.js 15.3.3
- **Language**: TypeScript
- **UI Library**: React 19
- **Styling**: Tailwind CSS with shadcn/ui components
- **Form Handling**: React Hook Form with Zod validation

## Quick Start

### Prerequisites

- Rust (latest stable)
- Node.js (latest LTS)
- PostgreSQL (optional, in-memory storage available)
- SQLx CLI (for database migrations)

### Installation

1. Clone the repository:
```bash
git clone git@git.gcdo.org:devteam/sharenet.git
cd sharenet
```

2. Set up the backend:
```bash
# Install SQLx CLI
cargo install sqlx-cli

# Create and set up the database (if using PostgreSQL)
sqlx database create
sqlx migrate run

# Build the backend
cd backend
cargo build
```

3. Set up the frontend:
```bash
cd frontend
npm install
```

### Running the Application

1. Start the backend (choose one):
```bash
# API with in-memory storage
cargo run --bin sharenet-api-memory

# API with PostgreSQL
cargo run --bin sharenet-api-postgres

# CLI with in-memory storage
cargo run --bin sharenet-cli-memory

# TUI with in-memory storage
cargo run --bin sharenet-tui-memory
```

2. Start the frontend:
```bash
cd frontend
npm run dev
```

The web interface will be available at `http://localhost:3000`.

## Project Structure

```
sharenet/
├── backend/           # Rust backend
│   ├── crates/       # Backend modules
│   ├── migrations/   # Database migrations
│   └── config/       # Configuration files
├── frontend/         # Next.js frontend
│   ├── src/         # Source code
│   └── public/      # Static assets
└── LICENSE.md       # Project license
```

## Features

### User Management
- Create, read, update, and delete users
- User authentication (coming soon)
- Role-based access control (coming soon)

### Product Management
- Create, read, update, and delete products
- Product categorization (coming soon)
- Inventory tracking (coming soon)

### Multiple Interfaces
- Web UI for general users
- REST API for integration
- CLI for automation
- TUI for terminal users

## Development

### Backend Development
See [backend/README.md](backend/README.md) for detailed backend development instructions.

### Frontend Development
See [frontend/README.md](frontend/README.md) for detailed frontend development instructions.

## Configuration

### Backend Configuration
Configuration files are located in `backend/config/`:
- `api-memory.env` - API server with in-memory storage
- `api-postgres.env` - API server with PostgreSQL storage
- `cli-memory.env` - CLI with in-memory storage
- `cli-postgres.env` - CLI with PostgreSQL storage
- `tui-memory.env` - TUI with in-memory storage
- `tui-postgres.env` - TUI with PostgreSQL storage

### Frontend Configuration
The frontend is configured to connect to the backend at `http://127.0.0.1:3000` by default. Update `frontend/src/lib/api.ts` if your backend is running on a different address.

## License

This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License - see the [LICENSE.md](LICENSE.md) file for details.

For more information about the license and compliance requirements, see [LICENSE_NOTICE.md](LICENSE_NOTICE.md).