Skip to content

amethystani/VOID.

Repository files navigation

VOID - Digital Image Processing Platform

Version: 1.0.1
Status: Production
License: Proprietary
Deployment: https://void-rosy-two.vercel.app/


Table of Contents

  1. Executive Summary
  2. System Architecture
  3. Technology Stack
  4. Core Features
  5. Installation Guide
  6. Configuration
  7. Development Workflow
  8. Project Structure
  9. Component Architecture
  10. Routing System
  11. Build and Deployment
  12. Performance Optimization
  13. Browser Compatibility
  14. Contributing Guidelines
  15. Troubleshooting
  16. API Reference

Executive Summary

VOID is a modern, client-side digital image processing platform designed to provide professional-grade image manipulation tools through an intuitive web interface. The platform emphasizes local processing, ensuring user privacy and optimal performance by executing all computations on the client device without server dependencies.

Design Philosophy

The application adheres to three core principles:

  1. Minimalism: Clean, distraction-free user interface that prioritizes functionality
  2. Performance: Optimized processing pipeline utilizing hardware acceleration where available
  3. Privacy: Complete client-side processing with zero data transmission to external servers

System Architecture

Architecture Overview

VOID implements a Single Page Application (SPA) architecture built on React 18.3.1 with TypeScript for type safety. The system follows a component-based design pattern with clear separation of concerns.

┌─────────────────────────────────────────────────────┐
│                  User Interface Layer               │
│            (React Components + Tailwind CSS)        │
├─────────────────────────────────────────────────────┤
│                  Routing Layer                      │
│              (React Router DOM v7.1.1)              │
├─────────────────────────────────────────────────────┤
│              Animation & Interaction Layer          │
│               (Framer Motion v11.15.0)              │
├─────────────────────────────────────────────────────┤
│              Image Processing Layer                 │
│            (Canvas API + WebGL + ONNX)              │
├─────────────────────────────────────────────────────┤
│                  Browser Runtime                    │
│           (Modern ES6+ JavaScript Engine)           │
└─────────────────────────────────────────────────────┘

Key Architectural Decisions

  • Client-Side Processing: All image manipulation occurs in the browser using Canvas API and WebGL
  • State Management: React hooks-based state management for optimal performance
  • Routing Strategy: Client-side routing with React Router for seamless navigation
  • Styling Approach: Utility-first CSS with Tailwind for rapid development and consistency
  • Build System: Vite for ultra-fast hot module replacement and optimized production builds

Technology Stack

Frontend Framework

  • React 18.3.1 - Component-based UI library
  • React DOM 18.3.1 - DOM rendering layer
  • TypeScript 5.5.3 - Static type checking and enhanced IDE support

Routing

  • React Router DOM 7.1.1 - Declarative routing for React applications

Animation & UI

  • Framer Motion 11.15.0 - Production-ready motion library for React
  • Lucide React 0.344.0 - Beautiful, consistent icon system

Styling

  • Tailwind CSS 3.4.1 - Utility-first CSS framework
  • PostCSS 8.4.35 - CSS transformation tool
  • Autoprefixer 10.4.18 - CSS vendor prefix automation

Development Tools

  • Vite 5.4.2 - Next-generation frontend build tool
  • ESLint 9.9.1 - JavaScript/TypeScript linting
  • TypeScript ESLint 8.3.0 - TypeScript-specific linting rules

Build System

  • @vitejs/plugin-react 4.3.1 - Official Vite plugin for React
  • Vite Build Optimizer - Production-ready build optimization

Core Features

1. Text Behind Image Processing

Technical Specification:

  • Local image encoding using ONNX Runtime
  • Mobile ML inference with 5M parameter model (vs. traditional 632M)
  • Processing time: 8ms (50x faster than standard implementations)
  • Hardware acceleration support via ONNX Runtime's mobile acceleration layer

Use Cases:

  • Typography effects for social media content
  • Professional design compositions
  • Creative visual storytelling

2. Fish-Eye Lens Effect

Technical Specification:

  • Spherical distortion algorithm with adjustable intensity
  • Real-time preview using WebGL shaders
  • Configurable focal point and radius parameters
  • Non-destructive editing workflow

Parameters:

  • Distortion Intensity: 0-100%
  • Center Point: X, Y coordinates
  • Radius: Variable (percentage of image dimensions)

3. Image Carousel System

Technical Specification:

  • Smooth scroll implementation with momentum physics
  • Touch gesture support for mobile devices
  • Responsive layout engine with automatic sizing
  • Lazy loading for optimal performance
  • Swipe velocity calculation and deceleration

4. Instagram Grid Splitter

Technical Specification:

  • Automatic image segmentation into 3x3 or custom grid layouts
  • Maintains aspect ratio across split images
  • Export functionality with sequential numbering
  • Preview mode for verification before export

Output Format:

  • Resolution: Original image resolution / grid divisions
  • File Format: PNG, JPEG
  • Naming Convention: image_grid_[row]_[col].[ext]

5. Circular Text Generator

Technical Specification:

  • SVG-based text path generation
  • Configurable radius and arc parameters
  • Font customization support
  • Real-time text curve adjustment
  • Export as vector or raster formats

Parameters:

  • Radius: 0-1000px
  • Arc Angle: 0-360 degrees
  • Text Direction: Clockwise/Counter-clockwise
  • Letter Spacing: -100% to +100%

6. Gallery System

Technical Specification:

  • Virtual scrolling for performance optimization
  • Progressive image loading with placeholder system
  • Grid layout with CSS Grid
  • Image upload and management interface
  • Local storage integration for persistence

Installation Guide

Prerequisites

Ensure the following software is installed on your development machine:

  • Node.js: Version 18.0.0 or higher
  • npm: Version 9.0.0 or higher (included with Node.js)
  • Git: Version 2.0.0 or higher

System Requirements

Minimum Requirements:

  • CPU: Dual-core processor
  • RAM: 4GB
  • Storage: 500MB free space
  • Browser: Chrome 90+, Firefox 88+, Safari 14+, Edge 90+

Recommended Requirements:

  • CPU: Quad-core processor
  • RAM: 8GB or higher
  • Storage: 1GB free space
  • Browser: Latest version of Chrome, Firefox, Safari, or Edge

Installation Steps

  1. Clone the Repository
git clone https://github.com/yourusername/VOID.git
cd VOID
  1. Install Dependencies
npm install

This command installs all required dependencies specified in package.json, including:

  • Production dependencies
  • Development dependencies
  • Peer dependencies
  1. Verify Installation
npm run dev

The development server should start on http://localhost:5173 (default Vite port).


Configuration

Environment Configuration

Create a .env file in the project root directory for environment-specific configurations:

# Development Configuration
VITE_APP_TITLE=VOID
VITE_APP_VERSION=1.0.1
VITE_API_BASE_URL=http://localhost:5173

# Production Configuration
# VITE_API_BASE_URL=https://void-rosy-two.vercel.app

Vite Configuration

The vite.config.ts file contains build and development server configuration:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  optimizeDeps: {
    exclude: ['lucide-react'],
  },
});

Configuration Options:

  • plugins: Includes React plugin for JSX transformation and Fast Refresh
  • optimizeDeps.exclude: Prevents pre-bundling of lucide-react for optimal tree-shaking

TypeScript Configuration

Three TypeScript configuration files manage different compilation contexts:

  1. tsconfig.json - Root configuration
  2. tsconfig.app.json - Application-specific settings
  3. tsconfig.node.json - Node.js environment settings (for build scripts)

Tailwind CSS Configuration

tailwind.config.js defines the design system:

export default {
  content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [],
};

PostCSS Configuration

postcss.config.js configures CSS processing pipeline:

export default {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
};

Development Workflow

Starting Development Server

npm run dev

Behavior:

  • Starts Vite development server on port 5173
  • Enables Hot Module Replacement (HMR)
  • Provides instant feedback on file changes
  • Source maps enabled for debugging

Linting

npm run lint

Linting Rules:

  • ESLint with TypeScript parser
  • React-specific rules
  • React Hooks rules
  • Automatic error detection and reporting

Building for Production

npm run build

Build Process:

  1. TypeScript compilation and type checking
  2. React component optimization
  3. CSS purging and minification
  4. JavaScript bundling and tree-shaking
  5. Asset optimization and compression
  6. Source map generation (optional)

Output:

  • Build artifacts in dist/ directory
  • Optimized bundle sizes
  • Production-ready static files

Preview Production Build

npm run preview

Serves the production build locally for testing before deployment.


Project Structure

VOID/
├── public/
│   ├── images/              # Static image assets
│   │   ├── 01.jpeg through 013.jpeg
│   │   ├── 1.jpeg, 2.jpg, 3.jpg, 4.jpeg
│   │   └── image.png through image5.png
│   └── vite.svg
├── src/
│   ├── components/          # React components
│   │   ├── About.tsx        # About page component
│   │   ├── Features.tsx     # Features showcase component
│   │   ├── Gallery.tsx      # Image gallery component
│   │   ├── Hero.tsx         # Hero section component
│   │   ├── Home.tsx         # Home page component
│   │   ├── MinimalHero.tsx  # Minimalist hero variant
│   │   ├── Settings.tsx     # Settings page component
│   │   ├── Showcase.tsx     # Project showcase component
│   │   ├── TextBehindImage.tsx  # Text behind image tool
│   │   ├── Tools.tsx        # Tools listing component
│   │   └── VoidGallery.tsx  # VOID gallery component
│   ├── App.tsx              # Main application component
│   ├── main.tsx             # Application entry point
│   ├── index.css            # Global styles
│   └── vite-env.d.ts        # Vite environment types
├── eslint.config.js         # ESLint configuration
├── index.html               # HTML entry point
├── package.json             # Project dependencies and scripts
├── postcss.config.js        # PostCSS configuration
├── tailwind.config.js       # Tailwind CSS configuration
├── tsconfig.json            # TypeScript configuration (root)
├── tsconfig.app.json        # TypeScript configuration (app)
├── tsconfig.node.json       # TypeScript configuration (node)
└── vite.config.ts           # Vite configuration

Directory Descriptions

/public

  • Contains static assets served as-is
  • Images, fonts, and other media files
  • Directly accessible via root URL

/src/components

  • Reusable React components
  • Single responsibility principle
  • Props-based configuration
  • TypeScript interfaces for type safety

/src

  • Application source code
  • Entry points and global configurations
  • CSS modules and global styles

Component Architecture

Component Hierarchy

App (Router Provider)
├── MinimalHero
│   └── Navigation
├── Features
│   └── FeatureCard[]
├── Gallery
│   └── ImageGrid
├── Home
│   ├── Navigation
│   ├── HeroSection
│   └── FeatureSections[]
│       └── FeatureCard[]
├── Tools
│   └── ToolCard[]
├── About
│   └── ContentSection
├── VoidGallery
│   └── ImageGrid
├── TextBehindImage
│   ├── ImageUploader
│   ├── TextEditor
│   └── ProcessingCanvas
└── Settings
    └── SettingsForm

Component Patterns

Container Components:

  • Manage state and business logic
  • Handle data fetching and transformations
  • Coordinate child component interactions

Presentational Components:

  • Receive data via props
  • Focus on UI rendering
  • Stateless when possible
  • Highly reusable

Example Component Structure:

interface ComponentProps {
  title: string;
  onAction: () => void;
}

export const Component: React.FC<ComponentProps> = ({ title, onAction }) => {
  // Component logic
  return (
    <div>
      {/* JSX markup */}
    </div>
  );
};

State Management Strategy

Local State:

  • useState for component-level state
  • useReducer for complex state logic

Side Effects:

  • useEffect for lifecycle operations
  • Cleanup functions for resource management

Navigation:

  • useNavigate hook from React Router
  • Programmatic navigation
  • URL parameter management

Routing System

Route Configuration

The application uses declarative routing with React Router DOM v7.1.1:

<Router>
  <Routes>
    <Route path="/" element={<Landing />} />
    <Route path="/home" element={<Home />} />
    <Route path="/tools" element={<Tools />} />
    <Route path="/tools/textbehindimage" element={<TextBehindImage />} />
    <Route path="/about" element={<About />} />
    <Route path="/gallery" element={<Gallery />} />
    <Route path="/void-gallery" element={<VoidGallery />} />
    <Route path="/settings" element={<Settings />} />
  </Routes>
</Router>

Route Structure

Route Component Description
/ MinimalHero + Features + Gallery Landing page with hero and features
/home Home Main dashboard and tool overview
/tools Tools Tool selection interface
/tools/textbehindimage TextBehindImage Text behind image processing tool
/about About Company and project information
/gallery Gallery User image gallery
/void-gallery VoidGallery Curated VOID gallery
/settings Settings User preferences and configuration

Navigation Guards

Currently, the application implements client-side routing without authentication guards. For future implementations requiring protected routes:

const ProtectedRoute: React.FC<{ children: React.ReactNode }> = ({ children }) => {
  const isAuthenticated = useAuth();
  return isAuthenticated ? <>{children}</> : <Navigate to="/login" />;
};

Build and Deployment

Production Build Process

Step 1: Type Checking

tsc --noEmit

Step 2: Build Optimization

npm run build

Build Optimizations:

  • Code splitting for optimal chunk sizes
  • Tree shaking to eliminate unused code
  • Minification of JavaScript and CSS
  • Asset optimization (images, fonts)
  • Gzip compression
  • Source map generation for debugging

Build Output Structure

dist/
├── assets/
│   ├── index-[hash].js        # Main application bundle
│   ├── vendor-[hash].js       # Third-party dependencies
│   ├── [component]-[hash].js  # Code-split components
│   └── index-[hash].css       # Compiled and minified CSS
├── images/                    # Optimized images
└── index.html                 # Entry HTML file

Deployment Platforms

Vercel (Current Production):

# Automatic deployment via Git integration
# Push to main branch triggers deployment
git push origin main

Manual Deployment:

{
  "scripts": {
    "deploy": "npm run build && vercel --prod"
  }
}

Alternative Platforms:

  • Netlify: Drop dist/ folder or Git integration
  • GitHub Pages: Use gh-pages package
  • AWS S3 + CloudFront: Static hosting with CDN
  • Firebase Hosting: Google's hosting solution

Environment-Specific Builds

Development:

npm run dev
  • Source maps enabled
  • Hot module replacement active
  • Verbose error messages

Production:

npm run build
  • Source maps optional
  • Optimized bundle sizes
  • Error messages sanitized

Performance Optimization

Optimization Strategies

1. Code Splitting

  • Route-based splitting via React Router
  • Dynamic imports for heavy components
  • Lazy loading of non-critical features

2. Image Optimization

  • Lazy loading for below-the-fold images
  • WebP format with fallback to JPEG/PNG
  • Responsive image sizing
  • Placeholder images during load

3. Bundle Size Reduction

  • Tree shaking in production builds
  • Elimination of unused CSS via Tailwind's purge
  • Compression with gzip/brotli
  • Selective lodash imports

4. Caching Strategy

  • Service worker for offline capability (future)
  • Browser cache headers for static assets
  • LocalStorage for user preferences

5. Runtime Performance

  • Virtual scrolling for large lists
  • Debouncing for input handlers
  • RequestAnimationFrame for animations
  • Web Workers for heavy computations (future)

Performance Metrics

Target Metrics:

  • First Contentful Paint (FCP): < 1.5s
  • Largest Contentful Paint (LCP): < 2.5s
  • Time to Interactive (TTI): < 3.5s
  • Cumulative Layout Shift (CLS): < 0.1
  • First Input Delay (FID): < 100ms

Performance Monitoring

Recommended Tools:

  • Lighthouse CI for automated audits
  • WebPageTest for detailed analysis
  • Chrome DevTools Performance panel
  • React DevTools Profiler

Browser Compatibility

Supported Browsers

Browser Minimum Version Recommended Version
Chrome 90+ Latest
Firefox 88+ Latest
Safari 14+ Latest
Edge 90+ Latest
Opera 76+ Latest

Feature Detection

The application uses modern web APIs:

  • ES6+ JavaScript features
  • CSS Grid and Flexbox
  • Canvas API
  • File API
  • LocalStorage
  • Fetch API

Polyfills: Currently not implemented. For broader compatibility, consider:

  • core-js for ES6+ features
  • whatwg-fetch for Fetch API
  • ResizeObserver polyfill

Mobile Compatibility

iOS:

  • Safari 14+
  • Chrome iOS 90+

Android:

  • Chrome 90+
  • Firefox 88+
  • Samsung Internet 14+

Touch Gestures:

  • Swipe navigation
  • Pinch-to-zoom (where applicable)
  • Touch-optimized hit targets (minimum 44x44px)

Contributing Guidelines

Code Style

TypeScript Guidelines:

  • Use strict type checking
  • Prefer interfaces over types for object shapes
  • Use enums for fixed value sets
  • Avoid any type; use unknown if type is truly unknown

React Guidelines:

  • Functional components with hooks
  • Props destructuring in function parameters
  • Early returns for conditional rendering
  • Meaningful component and prop names

Naming Conventions:

  • Components: PascalCase (e.g., TextBehindImage)
  • Files: PascalCase for components, camelCase for utilities
  • Functions: camelCase (e.g., handleSubmit)
  • Constants: UPPER_SNAKE_CASE (e.g., MAX_FILE_SIZE)

Git Workflow

Branch Naming:

  • feature/feature-name - New features
  • bugfix/bug-description - Bug fixes
  • hotfix/critical-fix - Production hotfixes
  • refactor/refactor-description - Code refactoring

Commit Messages:

<type>(<scope>): <subject>

<body>

<footer>

Types:

  • feat: New feature
  • fix: Bug fix
  • docs: Documentation changes
  • style: Code style changes (formatting)
  • refactor: Code refactoring
  • test: Adding tests
  • chore: Maintenance tasks

Example:

feat(tools): add circular text generator

Implement circular text generation tool with SVG-based
text path rendering and customizable parameters.

Closes #123

Pull Request Process

  1. Create feature branch from main
  2. Implement changes with appropriate tests
  3. Update documentation if necessary
  4. Run linting: npm run lint
  5. Build and test: npm run build
  6. Create pull request with detailed description
  7. Address review comments
  8. Merge after approval

Troubleshooting

Common Issues and Solutions

Issue: Development server fails to start

Error: Cannot find module 'vite'

Solution:

# Clean install dependencies
rm -rf node_modules package-lock.json
npm install

Issue: Build fails with TypeScript errors

Error: TS2307: Cannot find module './Component'

Solution:

  • Verify file extension is included in import
  • Check TypeScript configuration in tsconfig.json
  • Ensure all dependencies are installed

Issue: CSS styles not applying

Solution:

  • Verify Tailwind directives in index.css
  • Check tailwind.config.js content paths
  • Clear browser cache
  • Restart development server

Issue: Images not loading

Solution:

  • Verify image paths (relative to /public directory)
  • Check file naming (case-sensitive on some systems)
  • Ensure images exist in /public/images directory

Issue: Routing not working after deployment

Solution: Configure server to redirect all routes to index.html:

Vercel (vercel.json):

{
  "rewrites": [
    { "source": "/(.*)", "destination": "/index.html" }
  ]
}

Netlify (_redirects):

/*    /index.html   200

Performance Issues

Issue: Slow initial load time

Solutions:

  • Implement code splitting for routes
  • Enable gzip compression on server
  • Optimize image sizes and formats
  • Use CDN for static assets
  • Implement service worker for caching

Issue: Memory leaks during navigation

Solutions:

  • Add cleanup functions to useEffect hooks
  • Unsubscribe from event listeners
  • Cancel pending async operations
  • Clear intervals and timeouts

API Reference

Component Props

MinimalHero Component

interface MinimalHeroProps {
  // No props - self-contained component
}

Features:

  • Animated shape transitions (Square → Circle → Triangle)
  • Navigation to home page
  • Responsive layout

Features Component

interface FeatureItem {
  icon: LucideIcon;
  title: string;
  description: string;
}

Features:

  • Grid layout of feature cards
  • Hover effects
  • Responsive design

Gallery Component

interface GalleryProps {
  images?: string[];
  columns?: number;
  gap?: number;
}

Default Values:

  • columns: 3 (desktop), 2 (tablet), 1 (mobile)
  • gap: 24px

Tools Component

interface Tool {
  id: string;
  name: string;
  icon: LucideIcon;
  description: string;
}

Available Tools:

  • textbehindimage: Text Behind Image
  • fish-eye: Fish Eye Effect
  • carousel: Image Carousel
  • grid-splitter: Instagram Grid Splitter
  • circular-text: Circular Text Generator

Utility Functions

Currently, utility functions are component-scoped. For shared utilities, consider creating:

// src/utils/image.ts
export const optimizeImage = (file: File): Promise<Blob> => {
  // Image optimization logic
};

export const validateImageFormat = (file: File): boolean => {
  const validTypes = ['image/jpeg', 'image/png', 'image/webp'];
  return validTypes.includes(file.type);
};

export const resizeImage = (
  image: HTMLImageElement,
  maxWidth: number,
  maxHeight: number
): Promise<Blob> => {
  // Resize logic
};

Constants

// src/constants/app.ts
export const APP_NAME = 'VOID';
export const APP_VERSION = '1.0.1';
export const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
export const SUPPORTED_FORMATS = ['image/jpeg', 'image/png', 'image/webp'];
export const DEFAULT_IMAGE_QUALITY = 0.9;

Appendix

Glossary

SPA (Single Page Application): Web application that loads a single HTML page and dynamically updates content as the user interacts with the application.

HMR (Hot Module Replacement): Development feature that updates modules in the browser at runtime without requiring a full page refresh.

Tree Shaking: Dead code elimination process that removes unused exports from the final bundle.

Code Splitting: Technique of splitting code into multiple bundles that can be loaded on demand.

SSR (Server-Side Rendering): Rendering pages on the server rather than in the browser.

CSR (Client-Side Rendering): Rendering pages in the browser using JavaScript.


References

Official Documentation:

Community Resources:


License

Copyright 2024 VOID. All rights reserved.

This software is proprietary and confidential. Unauthorized copying, modification, distribution, or use of this software, via any medium, is strictly prohibited without explicit written permission from the copyright holder.


Contact

Project Maintainer: VOID Team
Website: https://void-rosy-two.vercel.app/
Support: [Insert support contact information]


Document Version: 1.0.0
Last Updated: November 10, 2025
Next Review Date: February 10, 2026

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published