Skip to content

Repository files navigation

POS Plus Logo

POS + (React Point of Sale)

A modern Point of Sale (POS) application built with React, TypeScript and Tailwind CSS

React TypeScript Tailwind CSS Vite

๐Ÿš€ Live Demo | ๐Ÿ“– Documentation | ๐Ÿ› ๏ธ Installation


Tipify Screenshot 1 POS plus Screenshot 1 POS plus Screenshot 2 POS plus Screenshot 3 POS plus Screenshot 4 POS plus Screenshot 5 POS plus Screenshot 6

Custom templates

POS plus Screenshot 7 POS plus Screenshot 8 POS plus Screenshot 9 POS plus Screenshot 10 POS plus Screenshot 11

---

โœจ Key Features

๐ŸŽจ Dynamic Template System

  • 6 Customizable Themes: Modern Lime, Ocean Blue, Sunset Orange, Royal Purple, Emerald Forest, Rose Gold
  • Real-time color changes across the entire interface
  • Adaptive logo with dynamic CSS filters

๐ŸŒ Multi-language Support (i18n)

  • 5 Available Languages: Spanish, English, Italian, French, German
  • Intuitive selector with country flags
  • Complete translations including POS-specific terminology

๐Ÿงฎ Advanced Calculation System

  • Configurable Tips: 0%, 5%, 10%, 25%, 50%, 100%
  • Customizable Discounts: 0%, 5%, 10%, 15%, 20%, 25%
  • Automatic calculations for subtotals, discounts and totals
  • Thermal printer ticket with authentic formatting

๐Ÿ“ฑ Responsive Design

  • Adaptive interface for desktop, tablet and mobile
  • Dynamic grid that adjusts to screen size
  • Optimized user experience on all devices

๐Ÿ› ๏ธ Tech Stack

Frontend Core

// Main technologies used
const techStack = {
  framework: "React 18.3.1",
  language: "TypeScript 5.5.3",
  styling: "Tailwind CSS 3.4.17",
  bundler: "Vite 5.0+",
  routing: "React Router DOM 7.6.3"
}

State Management

// Implementation with useReducer to handle order state
const [state, dispatch] = useReducer(orderReducer, initialState)

// Reducer actions
type OrderActions = 
  | { type: 'add-item'; payload: { item: MenuItem } }
  | { type: 'remove-item'; payload: { id: number } }
  | { type: 'clear-order' }
  | { type: 'update-tip'; payload: { tip: number } }
  | { type: 'update-discount'; payload: { discount: number } }

Template System

// Dynamic theme configuration
const TEMPLATES = [
  { 
    id: 'modern', 
    name: 'Modern Lime',
    icon: '๐ŸŒŸ',
    colors: {
      primary: 'from-lime-600 to-yellow-500',
      primaryHover: 'from-lime-700 to-yellow-600',
      bg: 'from-lime-50 via-yellow-50 to-lime-50',
      border: 'border-lime-200',
      text: 'text-lime-600'
    }
  }
  // ... more templates
] as const

๐Ÿš€ Installation and Setup

Prerequisites

  • Node.js >= 18.0.0
  • npm >= 8.0.0

Installation

# Clone the repository
git clone https://github.com/firedevelop/POSplus.git

# Navigate to directory
cd POSplus

# Install dependencies
npm install

# Start development server
npm run dev

Available Scripts

{
  "scripts": {
    "dev": "vite",              // Development server
    "build": "tsc -b && vite build",  // Production build
    "lint": "eslint .",         // Code linting
    "preview": "vite preview"   // Build preview
  }
}

๐Ÿ—๏ธ Project Architecture

src/
โ”œโ”€โ”€ components/           # Reusable components
โ”‚   โ”œโ”€โ”€ Header.tsx       # Main navigation
โ”‚   โ”œโ”€โ”€ MenuItem.tsx     # Product card
โ”‚   โ”œโ”€โ”€ OrderContents.tsx # Order content
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ data/                # Menu data
โ”‚   โ””โ”€โ”€ menu/
โ”‚       โ”œโ”€โ”€ es-ES.ts     # Spanish menu
โ”‚       โ”œโ”€โ”€ en-US.ts     # English menu
โ”‚       โ””โ”€โ”€ ...
โ”œโ”€โ”€ i18n/                # Internationalization
โ”‚   โ”œโ”€โ”€ es-ES.ts         # Spanish translations
โ”‚   โ”œโ”€โ”€ en-US.ts         # English translations
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ pages/               # Application pages
โ”œโ”€โ”€ reducers/            # State management
โ”œโ”€โ”€ types/               # TypeScript definitions
โ””โ”€โ”€ App.tsx              # Main component

๐Ÿ’ก Outstanding Technical Features

๐ŸŽฏ Scalable State Management

// Reducer pattern for complex state handling
const orderReducer = (state: OrderState, action: OrderActions): OrderState => {
  switch (action.type) {
    case 'add-item':
      const existingItem = state.order.find(item => item.id === action.payload.item.id)
      if (existingItem) {
        return {
          ...state,
          order: state.order.map(item =>
            item.id === action.payload.item.id
              ? { ...item, quantity: item.quantity + 1 }
              : item
          )
        }
      }
      return {
        ...state,
        order: [...state.order, { ...action.payload.item, quantity: 1 }]
      }
    // ... more cases
  }
}

๐ŸŽจ Dynamic Theming

// Template system with TypeScript
type Template = {
  id: string
  name: string
  icon: string
  colors: {
    primary: string
    primaryHover: string
    bg: string
    border: string
    text: string
  }
}

// Dynamic style application
const dynamicStyles = `bg-gradient-to-r ${template?.colors?.primary}`

๐ŸŒ Robust Internationalization

// Typed translation structure
interface Translations {
  menu: string
  home: string
  contact: string
  ticket: {
    title: string
    header: string
    subtotal: string
    total: string
  }
}

๐Ÿ“Š POS Functionality

๐Ÿ›’ Order Management

  • โœ… Add/remove products with one click
  • โœ… Automatic quantities when adding duplicate products
  • โœ… Real-time subtotal calculations
  • โœ… Percentage discount system
  • โœ… Configurable tips

๐Ÿงพ Ticket Generation

  • โœ… Authentic thermal printer format
  • โœ… Automatic ticket numbering
  • โœ… Detailed product information
  • โœ… Tax and total calculations
  • โœ… Print-optimized design

๐ŸŽจ Customization

  • โœ… 6 predefined color themes
  • โœ… Default template configuration
  • โœ… Automatic UI adaptation
  • โœ… Dynamic logo color changes

๐ŸŽฏ Use Cases

๐Ÿ• Restaurants

Perfect for pizzerias, cafes and restaurants that need a modern and easy-to-use POS system.

๐Ÿ›๏ธ Retail

Adaptable for small and medium stores that require discount and tip calculations.

๐Ÿ“ฑ Kiosks

Intuitive interface ideal for self-service systems and interactive kiosks.


๐Ÿ”ง Advanced Configuration

Change Default Template

// In src/App.tsx
const DEFAULT_TEMPLATE: TemplateId = 'ocean' // Change here

Add New Languages

// 1. Create file in src/i18n/
// 2. Add to LANGS array in App.tsx
const LANGS = [
  { code: 'pt-BR', flag: 'https://flagcdn.com/br.svg', label: 'Portuguรชs' }
]

Customize Products

// In src/data/menu/
export const menu = {
  pizzas: [
    {
      id: 1,
      name: "Margherita",
      price: 12.99,
      image: "/images/pizza-001.webp",
      description: "Tomato, mozzarella and fresh basil"
    }
  ]
}

๐Ÿ“ˆ Performance and Optimization

  • โšก Optimized build with Vite for fast loading
  • ๐Ÿ”„ Lazy loading of components and routes
  • ๐Ÿ“ฑ Responsive design with optimized breakpoints
  • ๐ŸŽจ Optimized CSS with Tailwind CSS purging
  • ๐Ÿงน Clean code with ESLint and TypeScript

๐Ÿค Contributing

Contributions are welcome! If you want to improve this project:

  1. Fork the project
  2. Create a feature branch (git checkout -b feature/new-feature)
  3. Commit your changes (git commit -am 'Add new feature')
  4. Push to the branch (git push origin feature/new-feature)
  5. Open a Pull Request

๐Ÿ‘จโ€๐Ÿ’ป Developed by

fireDevelop


โญ If you like this project, give it a star on GitHub! โญ


๐Ÿ“„ License

This project is under the MIT License. See the LICENSE file for more details.

Mockup

Photo by Tuqa Nabi on Unsplash

Pizzas

Photo by Aurรฉlien Lemasson-Thรฉobald on Unsplash

Photo by amirali mirhashemian on Unsplash

Photo by Louis Hansel on Unsplash

Photo by Louis Hansel on Unsplash

Photo by Alan Hardman on Unsplash

Photo by Saahil Khatkhate on Unsplash

Photo by Saundarya Srinivasan on Unsplash

Photo by Masimo Grabar on Unsplash

Photo by Jonas Kakaroto on Unsplash

Photo by Shourav Sheikh on Unsplash

Starters

Photo by Hybrid Storytellers on Unsplash

Photo by Fotografรญa de Alimentos on Unsplash

Photo by ร–mer Taha ร‡etin on Unsplash

Photo by 1Click on Unsplash

Photo by The Fry Family Food Co. on Unsplash

Photo by FAYYAZ KH on Unsplash

Photo by Karina B. on Unsplash

Photo by Anil Sharma on Unsplash

Photo by Lingchor on Unsplash

Drinks

Photo by Whitney Wright on Unsplash

Photo by LOGAN WEAVER | @LGNWVR on Unsplash

Photo by Edward Howell on Unsplash

Photo by Svitlana on Unsplash

Photo by Toa Heftiba on Unsplash

Photo by Hogir saeed on Unsplash

Photo by Giorgi Iremadze on Unsplash

Photo by ShengGeng Lin on Unsplash

Photo by ShengGeng Lin on Unsplash

Photo by Edward Howell on Unsplash

Desserts

Photo by Joyful on Unsplash

Photo by Kobby Mendez on Unsplash

Photo by Shivansh Sethi on Unsplash

Photo by Emile Mbunzama on Unsplash

Photo by Maryam Abubakar on Unsplash

Photo by Heather Barnes on Unsplash

Photo by Diliara Garifullina on Unsplash

Photo by Nahima Aparicio on Unsplash

Photo by Alex Lvrs on Unsplash

Photo by luisana zerpa on Unsplash

Art

Illustration by Revendo on Unsplash

About

A modern Point of Sale (POS) application built with React, TypeScript and Tailwind CSS

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages