Alexis Dev
HomeProjectsContact

Alexis Costa

Full Stack Developer building modern, efficient and scalable web applications.

Pilar, Buenos Aires, Argentina ๐Ÿ‡ฆ๐Ÿ‡ท

Repositories

  • crud-app
  • alexissdev.me
  • Balder
  • Isis

Connect

Send a messageJoin Discordalesideveloper@gmail.com

ยฉ 2026 Alexis Costa โ€” All rights reserved.

Back

isis

Isis is a desktop and mobile app from horus backend.

0 stars0 forksSwiftJune 8, 2026
appiosswifttesting

README

ISIS

A modern multi-platform e-commerce application built with SwiftUI for iOS and macOS. ISIS lets customers browse products, manage a shopping cart, track orders, and manage their profile โ€” while giving admins full control over products, categories, users, and orders.


Platforms

| Platform | Minimum Version | Navigation | |----------|----------------|------------| | iOS | 17.0 | TabView (5 tabs) | | macOS | 14.0 | NavigationSplitView + sidebar |

Both targets share models, networking, ViewModels, and reusable UI components from the Shared/ directory.


Features

Customer

  • Product catalog โ€” grid/list browse with real-time search (400 ms debounce) and category filtering
  • Shopping cart โ€” add, update quantity, remove items, stock validation, and checkout
  • Order history โ€” paginated list, detail view, status tracking, cancel pending orders
  • Profile โ€” update name/password, delete account
  • Authentication โ€” login, register, forgot/reset password, JWT with automatic token refresh

Admin

  • User management โ€” list all users, update roles
  • Product management โ€” create, edit, delete products with images and categories
  • Category management โ€” create, update, delete categories
  • Order management โ€” view all orders, update order status

Architecture

Views (SwiftUI)
  โ””โ”€โ”€ @Observable ViewModels
        โ””โ”€โ”€ APIClient (Swift Actor)
              โ””โ”€โ”€ REST API  (http://<host>:8080)
  • MVVM with Swift's @Observable macro (no Combine required)
  • Async/await throughout โ€” no completion handlers
  • Actor-based APIClient for thread-safe HTTP operations
  • Environment injection of ViewModels into the view hierarchy
  • Shared code across iOS and macOS (44 Swift files total)

Project Structure

OsirisApp/
โ”œโ”€โ”€ iOS/
โ”‚   โ”œโ”€โ”€ OsirisApp.swift          # App entry point
โ”‚   โ”œโ”€โ”€ Info.plist
โ”‚   โ””โ”€โ”€ Views/
โ”‚       โ”œโ”€โ”€ RootView.swift       # TabView navigation
โ”‚       โ”œโ”€โ”€ Auth/
โ”‚       โ”œโ”€โ”€ Products/
โ”‚       โ”œโ”€โ”€ Cart/
โ”‚       โ”œโ”€โ”€ Orders/
โ”‚       โ”œโ”€โ”€ Profile/
โ”‚       โ””โ”€โ”€ Admin/
โ”œโ”€โ”€ macOS/
โ”‚   โ”œโ”€โ”€ OsirisApp.swift
โ”‚   โ”œโ”€โ”€ Info.plist
โ”‚   โ””โ”€โ”€ Views/
โ”‚       โ”œโ”€โ”€ RootView.swift       # NavigationSplitView sidebar
โ”‚       โ”œโ”€โ”€ Auth/
โ”‚       โ”œโ”€โ”€ Products/
โ”‚       โ”œโ”€โ”€ Cart/
โ”‚       โ”œโ”€โ”€ Orders/
โ”‚       โ”œโ”€โ”€ Profile/
โ”‚       โ””โ”€โ”€ Admin/
โ”œโ”€โ”€ Shared/
โ”‚   โ”œโ”€โ”€ Models/
โ”‚   โ”‚   โ””โ”€โ”€ Models.swift         # Data models & API types
โ”‚   โ”œโ”€โ”€ Networking/
โ”‚   โ”‚   โ”œโ”€โ”€ APIClient.swift      # HTTP client, token refresh
โ”‚   โ”‚   โ””โ”€โ”€ KeychainService.swift
โ”‚   โ”œโ”€โ”€ ViewModels/
โ”‚   โ”‚   โ”œโ”€โ”€ AuthViewModel.swift
โ”‚   โ”‚   โ”œโ”€โ”€ ProductsViewModel.swift
โ”‚   โ”‚   โ”œโ”€โ”€ CartViewModel.swift
โ”‚   โ”‚   โ”œโ”€โ”€ OrdersViewModel.swift
โ”‚   โ”‚   โ”œโ”€โ”€ AdminViewModel.swift
โ”‚   โ”‚   โ””โ”€โ”€ ProfileViewModel.swift
โ”‚   โ”œโ”€โ”€ Views/
โ”‚   โ”‚   โ”œโ”€โ”€ ProductImageView.swift
โ”‚   โ”‚   โ”œโ”€โ”€ ProductFormView.swift
โ”‚   โ”‚   โ”œโ”€โ”€ CategoryFormView.swift
โ”‚   โ”‚   โ””โ”€โ”€ StatusBadge.swift
โ”‚   โ””โ”€โ”€ Utilities/
โ”‚       โ””โ”€โ”€ Utilities.swift
โ”œโ”€โ”€ project.yml                  # xcodegen configuration
โ””โ”€โ”€ OsirisApp.xcodeproj/

Networking

APIClient is a Swift actor singleton (APIClient.shared) that handles all HTTP communication.

Base URL: http://192.168.0.13:8080 (local development โ€” update APIConfig.baseURL for other environments)

Authentication: Bearer JWT tokens stored securely in the Keychain. On a 401 response the client automatically refreshes the access token and retries the original request once.

Endpoints summary

| Resource | Method | Path | |----------|--------|------| | Auth | POST | /auth/login, /auth/register, /auth/logout, /auth/logout-all, /auth/forgot-password, /auth/reset-password, /auth/refresh | | Users | GET/PUT/DELETE | /users/me | | Products | GET/POST/PUT/DELETE | /products, /products/{id} | | Cart | GET/POST/PUT/DELETE | /cart, /cart/items, /cart/items/{id} | | Orders | GET/POST/DELETE | /orders, /orders/{id}, /orders/checkout, /orders/{id}/cancel | | Categories | GET/POST/PUT/DELETE | /categories, /categories/{id} | | Admin | GET/PUT | /admin/users, /admin/users/{id}/role, /admin/orders, /admin/orders/{id}/status |

All prices are stored and transmitted in cents (integer) and formatted to USD by the formatPrice utility.


Data Models

AuthResponse      // accessToken, refreshToken
UserResponse      // id, name, email, role, emailVerified
ProductResponse   // id, name, description, price (cents), stock, imageUrl, category
CategoryResponse  // id, name, description
CartResponse      // id, items, total (cents)
OrderResponse     // id, status, totalAmount, createdAt, items
Page<T>           // content, totalElements, totalPages

Order status values: PENDING ยท PROCESSING ยท SHIPPED ยท DELIVERED ยท CANCELLED


Getting Started

Requirements

  • Xcode 15+
  • xcodegen (brew install xcodegen)
  • A running backend at the configured base URL

Setup

# Clone the repo
git clone <repo-url>
cd OsirisApp

# Generate the Xcode project
xcodegen generate

# Open in Xcode
open OsirisApp.xcodeproj

Select the OsirisApp-iOS or OsirisApp-macOS scheme and run.

Note: The backend URL is hard-coded in Shared/Networking/APIClient.swift (APIConfig.baseURL). Change it to point at your server before building.


Dependencies

None. The app relies exclusively on Apple frameworks:

  • SwiftUI โ€” UI
  • Foundation / URLSession โ€” Networking
  • Security โ€” Keychain storage

License

MIT

View on GitHubโ† Back