Cloud storage service.
- Blob Buddy ☁️
Blob Buddy is a web application designed for easy and secure file storage in the cloud. It provides a user-friendly interface for uploading, managing, and accessing files, leveraging Azure Blob Storage, storage capabilities. The project includes user authentication, an admin panel for user management, and utilizes development practices with Docker and Turborepo.
- Secure File Uploads: Direct-to-cloud uploads using SAS tokens.
- User Authentication: Register and login functionality, including Google OAuth.
- File Management: Browse, view details, and manage uploaded files (add download/delete features here if implemented).
- Admin Panel: Server-side rendered panel for user management (accessible to admin users).
- Realtime Access Control Restring access in real time via SSE.
- Responsive UI: Client application built with Vite and Tailwind CSS for a modern look and feel across devices.
- Local Development: Easy setup using Docker Compose and Turborepo.
- API Documentation: OpenAPI (Swagger) documentation for the backend API.
- Frontend: Vite Multi-page, Tailwind CSS App
- Backend: Node.js, Fastify + PrismaORM
- Admin Views: SSR EJS
- Database: PostgreSQL
- Cloud Storage: Microsoft Azure Blob Storage (emulated locally with Azurite)
- Monorepo Management: Turborepo
- Containerization: Docker, Docker Compose
- Authentication: Google OAuth for client or plain password and JWT for SSR Admin panel
- Realtime Access Control: SSE (Server-Sent Events) for real-time user activity
- API Documentation: OpenAPI (Swagger UI)
Visual representations of the Blob Buddy system architecture and key processes.
-
User Authentication
-
File Upload Interface
-
User Dashboard
-
Admin Controls
-
Restricting Users Access
Before you begin, ensure you have the following installed:
- Node.js v22 LTS
- npm v10 or later
- Docker
- Turborepo CLI (
npm install turbo --global
)
-
Clone the repository:
git clone https://github.com/Oskarowski/blobify-cloud-storage-service cd blobify-cloud-storage-service
-
Install Dependencies: Run the install command from the root of the project. This will use Turborepo to install dependencies for all apps and packages (
client
,server
, etc.).npm install
-
Configure Environment Variables:
- The
server
app requires a.env
file. Copy the example file (e.g.,.env.example
) to.env
within theapps/server
directory:cp apps/server/.env_example apps/server/.env
- Review the
apps/server/.env
file and fill in any necessary secrets, especiallyGOOGLE_CLIENT_ID
andGOOGLE_CLIENT_SECRET
if you plan to use Google OAuth. The database and Azurite connection strings are pre-configured for the Dev Docker Compose setup. - The
client
app needVITE_API_URL
, although this is passed via build arguments in Docker or defaults tohttp://localhost:3000
for development.
- The
-
Running the Environment
npx turbo run dev
This command orchestrates the following:- Starts the server Node.js application in development mode (with hot-reloading).
- Starts the client Vite development server (with hot-reloading).
-
Accessing Services Once the environment is running:
- Client Application: http://localhost:5173
- API Server: http://localhost:3000
- API Documentation (OpenAPI): http://localhost:3000/docs
- Admin Panel Login: http://localhost:3000/admin/login
- PostgreSQL Database: Connect via port 5432 (User:
blobify_dev_user
, Pass:blobify_dev_user_password
, DB:blobify_dev_db
)
This project is licensed under the GNU GPL License. See the LICENSE file for details.