{"id":42691747,"url":"https://github.com/parazeeknova/fossee-wast","last_synced_at":"2026-01-29T13:05:15.500Z","repository":{"id":334959399,"uuid":"1143437329","full_name":"parazeeknova/FOSSEE-WAST","owner":"parazeeknova","description":"Web Application Screening Task - Chemical Equipment Parameter Visualizer (Hybrid Web + Desktop App)","archived":false,"fork":false,"pushed_at":"2026-01-27T18:30:43.000Z","size":439,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-28T04:54:46.152Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/parazeeknova.png","metadata":{"files":{"readme":".github/README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-27T15:25:55.000Z","updated_at":"2026-01-27T18:39:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/parazeeknova/FOSSEE-WAST","commit_stats":null,"previous_names":["parazeeknova/fossee-wast"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/parazeeknova/FOSSEE-WAST","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parazeeknova%2FFOSSEE-WAST","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parazeeknova%2FFOSSEE-WAST/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parazeeknova%2FFOSSEE-WAST/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parazeeknova%2FFOSSEE-WAST/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/parazeeknova","download_url":"https://codeload.github.com/parazeeknova/FOSSEE-WAST/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parazeeknova%2FFOSSEE-WAST/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28877889,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T10:31:27.438Z","status":"ssl_error","status_checked_at":"2026-01-29T10:31:01.017Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-29T13:04:59.094Z","updated_at":"2026-01-29T13:05:15.495Z","avatar_url":"https://github.com/parazeeknova.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Chemical Equipment Parameter Visualizer (Hybrid Web + Desktop App)\n##### Intern Screening Task by FOSSEE\n\nA hybrid Web + Desktop application for data visualization and analytics of chemical equipment parameters. Built with Django REST API backend, React.js web frontend, and PyQt5 desktop frontend.\n\n\u003cdiv align=\"center\"\u003e\n\n  \u003cbr\u003e\n  \u003ca href=\"#screenshots\"\u003e\u003ckbd\u003e \u003cbr\u003e Screenshots \u003cbr\u003e \u003c/kbd\u003e\u003c/a\u003e\u0026ensp;\u0026ensp;\n  \u003ca href=\"#monorepo-structure\"\u003e\u003ckbd\u003e \u003cbr\u003e  Structure \u003cbr\u003e \u003c/kbd\u003e\u003c/a\u003e\u0026ensp;\u0026ensp;\n  \u003ca href=\"#architecture\"\u003e\u003ckbd\u003e \u003cbr\u003e Architecture \u003cbr\u003e \u003c/kbd\u003e\u003c/a\u003e\u0026ensp;\u0026ensp;\n  \u003ca href=\"#available-commands\"\u003e\u003ckbd\u003e \u003cbr\u003e Commands \u003cbr\u003e \u003c/kbd\u003e\u003c/a\u003e\u0026ensp;\u0026ensp;\n  \u003ca href=\"#setup-instructions\"\u003e\u003ckbd\u003e \u003cbr\u003e Instructions \u003cbr\u003e \u003c/kbd\u003e\u003c/a\u003e\n  \u003cbr\u003e\u003cbr\u003e\n\u003c/div\u003e\n\n---\n\n### Deployed URLs\n\n\u003e [!NOTE]\n\u003e This application is deployed and accessible at the following URLs, hosted on Oracle Cloud and will be available till the end of the intern screening period\n\n| Service | URL |\n|---------|-----|\n| Web App | https://fossee-wast.singularityworks.xyz |\n| API | https://fwbasli-api.singularityworks.xyz/api/ |\n\n\u003e [!TIP]\n\u003e For web app or native desktop app you can use the following test user credentials OR you can register a new user via the login page on web or the native desktop app.\n\n| Credentials | Value |\n|-------------|-------|\n| **Username:** | fossee |\n| **Password:** | fosseewba |\n\n---\n\n### Tech Stack\n\nThis project is built using the following technologies as mentioned in the [requirements](https://docs.google.com/document/d/1atHkNtWJd-T4Hg7WFsOFPEikQ7QM_rX4/edit) document:\n\n| Layer | Technology | Purpose |\n|-------|------------|---------|\n| Backend | Django + REST Framework | REST API, Authentication, Data Processing |\n| Frontend (Web) | React + TypeScript + Vite + Chart.js | Web Interface |\n| Frontend (Desktop) | PyQt5 + Matplotlib | Native Desktop Interface |\n| Data Processing | Pandas | CSV parsing and analytics |\n| Database | SQLite | Persistent storage |\n| Authentication | JWT (SimpleJWT) | Secure token-based auth |\n| PDF Generation | ReportLab | Export reports |\n| Storage | Local (dev) / AWS S3 (prod) | File storage |\n| Package Manager | Bun + UV | JS/TS and Python dependencies |\n| Monorepo | Turborepo + Bun Workspaces | Build orchestration |\n\n\u003e [!NOTE]\n\u003e The architecture slightly differs between development (local) and production deployments as detailed below.\n\n---\n\n### Monorepo Structure\n\nThis project is a **monorepo** managed with **Bun workspaces** and **Turborepo** also managed with **UV** for Python dependencies.:\n\n```\nfossee-wast/\n├── apps/\n│   ├── api/          # Django REST API (Python/UV)\n│   ├── web/          # React + Vite Frontend (TypeScript/Bun)\n│   └── native/       # PyQt5 Desktop App (Python/UV)\n├── packages/         # Shared packages (if any)\n├── package.json      # Root workspace config \u0026 scripts\n├── turbo.json        # Turborepo configuration\n└── bun.lock          # Bun lockfile\n```\n\n#### Workspace Packages\n\nThe monorepo contains the following packages bundled together:\n\n| Package | Path | Manager | Description |\n|---------|------|---------|-------------|\n| `api` | `apps/api` | UV (Python) | Django REST API backend |\n| `web` | `apps/web` | Bun (JS/TS) | React web frontend |\n| `native` | `apps/native` | UV (Python) | PyQt5 desktop application |\n\n---\n\n### Architecture\n\n#### Development Architecture\n\nFor the local development setup, the architecture is as follows, where both web and desktop clients communicate with the Django REST API backend which uses SQLite for data storage and local file system for media files.\n\n```mermaid\nflowchart TB\n    subgraph Clients[\"Client Applications\"]\n        WEB[\"Web Frontend\u003cbr/\u003e(React + Vite)\u003cbr/\u003elocalhost:5173\"]\n        DESKTOP[\"Desktop App\u003cbr/\u003e(PyQt5 + Matplotlib)\"]\n    end\n\n    subgraph Backend[\"Backend Services\"]\n        API[\"Django REST API\u003cbr/\u003elocalhost:8001\"]\n        DB[(SQLite Database)]\n        LOCAL[\"Local File Storage\u003cbr/\u003e(media_local/)\"]\n    end\n\n    WEB --\u003e|HTTP/REST\u003cbr/\u003eJWT Auth| API\n    DESKTOP --\u003e|HTTP/REST\u003cbr/\u003eJWT Auth| API\n    API --\u003e DB\n    API --\u003e LOCAL\n```\n\n#### Production Architecture\n\nIn production, the web frontend is served via Nginx as a static SPA, while the API is hosted with Gunicorn. Media files are stored in an AWS S3 bucket, and the database remains SQLite with a persistent volume.\n\n```mermaid\nflowchart TB\n    subgraph Internet[\"Internet\"]\n        USER[\"Users\"]\n    end\n\n    subgraph CloudInfra[\"Cloud Infrastructure\"]\n        subgraph WebTier[\"Web Tier\"]\n            NGINX[\"Nginx\u003cbr/\u003e(Static Files + SPA)\"]\n            WEBURL[\"fossee-wast.singularityworks.xyz\"]\n        end\n\n        subgraph APITier[\"API Tier\"]\n            GUNICORN[\"Gunicorn\u003cbr/\u003e(2 Workers)\"]\n            DJANGO[\"Django REST API\"]\n            APIURL[\"fwbasli-api.singularityworks.xyz\"]\n        end\n\n        subgraph Storage[\"Storage Layer\"]\n            DB[(SQLite Database\u003cbr/\u003e/app/data/)]\n            S3[\"AWS S3 Bucket\u003cbr/\u003e(Media Files)\"]\n        end\n    end\n\n    USER --\u003e WEBURL\n    WEBURL --\u003e NGINX\n    NGINX --\u003e|Static Assets| USER\n    USER --\u003e APIURL\n    APIURL --\u003e GUNICORN\n    GUNICORN --\u003e DJANGO\n    DJANGO --\u003e DB\n    DJANGO --\u003e|File Storage| S3\n```\n\n---\n\n### Prerequisites\n\n\u003e [!WARNING]\n\u003e Ensure you have the following tools installed on your system before proceeding with the setup.\n\n| Tool | Version | Installation |\n|------|---------|--------------|\n| Node.js | \u003e= 24 | [node](https://nodejs.org/) |\n| Bun | \u003e= 1.3.5 | [bun](https://bun.sh/)|\n| Python | \u003e= 3.14 | [python](https://www.python.org/) |\n| UV | Latest | [uv](https://astral.sh/uv/) |\n\n---\n\n### Setup Instructions\n\n```bash\n# 1. Clone the Repository\ngit clone https://github.com/yourusername/FOSSEE-WAST.git\ncd FOSSEE-WAST\n# 2. Install Dependencies\n# Install root JS dependencies (includes Bun workspaces)\nbun install\n# Install Python dependencies for both API and Native apps\nbun run iuv\n# 3. Setup Environment Variables\nbun run setup:env\n# 3. OR manually copy .env files\ncp apps/api/.env.example apps/api/.env\n# 4. Run Database Migrations\nbun run migrate\n# 5. (Optional) Create Admin User\nbun run admin\n```\n\n---\n\n### Running the Application\n\n#### Option A: Run Web App (Frontend + API)\n\n```bash\nbun run web\n```\n\nThis starts:\n- API server at `http://localhost:8001`\n- Web frontend at `http://localhost:5173`\n\n#### Option B: Run Desktop App (Native + API)\n\n```bash\nbun run native\n```\n\nThis starts:\n- API server at `http://localhost:8001`\n- PyQt5 desktop application\n\n#### Option C: Run Components Separately\n\n```bash\n# Terminal 1: API only\nbun run api\n\n# Terminal 2: Web frontend only\nbun run dev\n\n# Or: Desktop app only (requires API running)\nbun run desktop\n```\n\n---\n\n### Screenshots\n\n| | | |\n|:---:|:---:|:---:|\n| ![Upload Web](assets/upload-web.png) | ![Upload History](assets/upload-history.png) | ![Data Table](assets/data-table.png) |\n| Upload Interface | Upload History | Data Table View |\n| ![Sample Data](assets/sample-data.png) | ![Data Large](assets/data-large.png) | ![Reports](assets/reports.png) |\n| Sample Data Visualization | Large Dataset View | PDF Reports |\n\n---\n\n### Available Commands\n\n| Command | Description |\n|---------|-------------|\n| `bun run setup:env` | Copy `.env.example` to `.env` in API folder |\n| `bun run web` | Run API + Web frontend concurrently |\n| `bun run native` | Run API + Desktop app concurrently |\n| `bun run dev` | Run web frontend only (Vite dev server) |\n| `bun run api` | Run Django API server only |\n| `bun run desktop` | Run PyQt5 desktop app only |\n| `bun run migrate` | Run Django database migrations |\n| `bun run admin` | Create Django superuser |\n| `bun run iuv` | Sync UV dependencies for Python apps |\n| `bun run check` | Run all linters (Biome + Ruff) |\n| `bun run biome` | Run Biome linter on web app |\n| `bun run ruff` | Run Ruff linter on Python apps |\n\n---\n\n\u003c!-- ### API Endpoints\n\nBase URL: `http://localhost:8001/api` (dev) | `https://fwbasli-api.singularityworks.xyz/api` (prod)\n\n#### Authentication\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| POST | `/auth/register/` | Register new user |\n| POST | `/auth/login/` | Login and get JWT tokens |\n| POST | `/auth/logout/` | Logout and blacklist token |\n| POST | `/auth/refresh/` | Refresh access token |\n| GET | `/auth/user/` | Get current user info |\n\n#### Datasets\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | `/datasets/` | List user's datasets |\n| POST | `/datasets/upload/` | Upload CSV file |\n| GET | `/datasets/{id}/` | Get dataset details |\n| DELETE | `/datasets/{id}/` | Delete dataset |\n| GET | `/datasets/{id}/data/` | Get paginated equipment data |\n| GET | `/datasets/{id}/summary/` | Get summary statistics |\n| GET | `/datasets/{id}/report/` | Download PDF report |\n\n--- --\u003e\n\n### Features\n\n| Feature | Description |\n|---------|-------------|\n| CSV Upload | Upload equipment data via Web or Desktop interface |\n| Data Visualization | Interactive charts (Bar, Pie, Scatter, Line) using Chart.js (Web) and Matplotlib (Desktop) |\n| Data Table | Paginated, sortable, filterable equipment data view |\n| Summary Statistics | Aggregated metrics (min, max, avg, sum) for flowrate, pressure, temperature |\n| Equipment Type Distribution | Visual breakdown by equipment type |\n| History Management | Stores last 5 uploaded datasets per user |\n| PDF Reports | Generate downloadable equipment analysis reports |\n| JWT Authentication | Secure login with access/refresh token rotation |\n| Rate Limiting | API protection against abuse (100/hr anonymous, 1000/hr authenticated) |\n\n---\n\n### CSV Format\n\nThe application expects CSV files with the following columns:\n\n| Column | Type | Description |\n|--------|------|-------------|\n| Equipment Name | String | Unique equipment identifier |\n| Type | String | Equipment category (Pump, Valve, Reactor, etc.) |\n| Flowrate | Float | Flow rate measurement |\n| Pressure | Float | Pressure measurement |\n| Temperature | Float | Temperature measurement |\n\n**Sample CSV**:\n\n\u003e [!TIP]\n\u003e You can use the following sample data in `apps/api/samples`.\n\n```csv\nEquipment Name,Type,Flowrate,Pressure,Temperature\nPump-1,Pump,120,5.2,110\nCompressor-1,Compressor,95,8.4,95\nValve-1,Valve,60,4.1,105\nHeatExchanger-1,HeatExchanger,150,6.2,130\nReactor-1,Reactor,140,7.5,140\n```\n\n---\n\n### Production Deployment\n#### Docker Build\n\n**API:**\n```bash\ncd apps/api\ndocker build -t fossee-api .\ndocker run -p 8001:8001 -v data:/app/data fossee-api\n```\n\n**Web:**\n```bash\ncd apps/web\ndocker build --build-arg VITE_API_URL=https://fwbasli-api.singularityworks.xyz/api -t fossee-web .\ndocker run -p 80:80 fossee-web\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparazeeknova%2Ffossee-wast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparazeeknova%2Ffossee-wast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparazeeknova%2Ffossee-wast/lists"}