Skip to content

Latest commit

 

History

History
101 lines (72 loc) · 2.64 KB

File metadata and controls

101 lines (72 loc) · 2.64 KB

📐 Prism Viewer App – Requirements

We are seeking a talented Software Engineer / Web Developer to build a cross-platform, modular application.

This task evaluates your ability to:

  • Design scalable software architecture
  • Reuse code across desktop and web platforms
  • Implement plugins
  • Build, test, and deploy with proper development workflows

🎯 Objective

Develop the Prism Viewer as:

  • Desktop Application → Python (PySide2)
  • Web Application → Django (backend) + React (frontend)
  • Shared Core → Contains business logic (calculations, DB access)
  • Plugin System → Install new shapes at runtime
  • 3D Visualization → Both desktop and web
  • CI/CD Setup with automated unit testing

🖼️ Visual Flow

UI Flow:

  1. Home Screen → Buttons: Rectangular Prism & Install a Plugin
  2. After Installing a Plugin → New shape (e.g., Cylinder) appears
  3. Module Screen → Select section → Show volume/surface area → Display 3D Model

🔧 Technical Requirements

🔄 Architecture

Follow MVC pattern with suggested folder structure:

/src/ ├── core/ # Shared logic ├── desktop/ # PySide2 app ├── web/ # Django + React


🖥️ Desktop Application

  • UI → PySide2
  • Database → SQLite (store prism data)
  • 3D Model → Render using pythonOCC
  • Plugin Support
    • Install from separate GitHub repos (e.g., Cylinder module)
    • Installed at runtime (no rebuild required)
    • Each plugin: Own UI + CAD generator
  • Installer
    • Built via PyInstaller or similar
    • Fetches latest master branch of main app + plugins
    • Must not bundle web app files

🌐 Web Application

Backend (Django + DRF)

  • Database → MySQL or PostgreSQL
  • Endpoints:
    • /prisms/ → List of prism designations
    • /prisms/<id>/ → Dimensions
    • /prisms/<id>/compute/ → Surface area + volume
    • /prisms/<id>/cad/ → CAD model data (via FreeCAD)

Frontend (React)

  • Components:
    • Dropdown to select prism
    • Display surface area & volume
    • Button to fetch & show 3D model
  • 3D RenderingThree.js (or similar)

🧩 Plugin System

  • Default module → Rectangular Prism
  • New modules (e.g., Cylinder):
    • Live in separate GitHub repo
    • Loaded at runtime
    • Own UI + CAD generator logic
    • Integrate without code duplication
    • Installable via script/installer

Run commands:

pytest     # Python tests
npm test   # React tests