Skip to content

anshu787/buildtrust-connect

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

245 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ConQuote Connect β€” Smart Construction Quotation Platform

A full-stack web application connecting Builders and Contractors with AI-powered quoting, BIM 3D visualization, and blockchain-secured milestone-based escrow payments.

React TypeScript Vite Tailwind CSS Supabase Solidity Ethereum

πŸ”— Live Demo: https://bim-build-trust.lovable.app


πŸ“‹ Problem Statement

In the construction industry, the quotation and procurement process is fragmented, opaque, and prone to disputes:

  • Builders struggle to compare contractor quotes objectively
  • Contractors lack a centralized platform to discover and bid on projects
  • Payment disputes arise due to lack of milestone verification
  • No transparency in fund flow between parties
  • Manual processes lead to errors in risk assessment and contract drafting
  • No immutable proof of project completion or contractor reputation

πŸ’‘ Solution Approach

ConQuote Connect is a smart construction quotation platform that digitizes the entire builder-contractor workflow:

  1. Builders post projects with budgets, timelines, and optional BIM/3D model files
  2. Contractors browse open projects and submit structured quotes
  3. AI Tools analyze quotes, assess project risks, and auto-generate contract drafts
  4. BIM Viewer enables 3D model visualization with milestone tagging and annotations
  5. Blockchain Escrow locks funds on-chain and releases them per approved milestone
  6. NFT Certificates provide immutable proof of project completion
  7. Reviews & Ratings build verifiable contractor/builder reputation
  8. Real-time Chat enables project-scoped communication with file sharing

πŸ—οΈ Solution Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        FRONTEND                              β”‚
β”‚  React 18 + TypeScript + Vite + Tailwind CSS + shadcn/ui     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ Landing  β”‚ β”‚ Builder  β”‚ β”‚Contractorβ”‚ β”‚ Shared Pages     β”‚ β”‚
β”‚  β”‚ Page     β”‚ β”‚ Panel    β”‚ β”‚ Panel    β”‚ β”‚ (AI, BIM, Escrow)β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Three.js/R3F β”‚  β”‚ Ethers.js    β”‚  β”‚ React Query       β”‚  β”‚
β”‚  β”‚ BIM Viewer   β”‚  β”‚ Wallet/Escrowβ”‚  β”‚ Data Fetching     β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     BACKEND (Supabase)                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ Auth     β”‚  β”‚ PostgreSQL   β”‚  β”‚ Edge Functions           β”‚ β”‚
β”‚  β”‚ (Email)  β”‚  β”‚ + RLS        β”‚  β”‚ (AI Tools via Lovable AI)β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β”‚
β”‚  β”‚ Storage  β”‚  β”‚ Realtime     β”‚                              β”‚
β”‚  β”‚ (Files)  β”‚  β”‚ (Messages)   β”‚                              β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    BLOCKCHAIN (Sepolia)                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ MilestoneEscrow.sol (Solidity 0.8.20)                 β”‚   β”‚
β”‚  β”‚ β€’ deposit() β†’ lock ETH per milestone                  β”‚   β”‚
β”‚  β”‚ β€’ releaseFunds() β†’ pay contractor on approval         β”‚   β”‚
β”‚  β”‚ β€’ dispute() / resolveDispute() β†’ conflict resolution  β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ MilestoneCertificateNFT.sol (ERC-721)                 β”‚   β”‚
β”‚  β”‚ β€’ mintCertificate() β†’ immutable completion proof      β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

✨ Key Features

πŸ” Authentication & Role-Based Access

  • Email/password signup & login with email verification
  • Role selection: Builder or Contractor
  • Role-based routing and dashboards
  • Row-Level Security (RLS) on all database tables
  • Protected routes with auth guards

🏒 Builder Panel

  • Create projects with title, description, location, budget range, timeline
  • Upload BIM/IFC files for 3D visualization
  • View and compare contractor quotes side-by-side
  • Award projects to winning contractors
  • Track milestones and approve/reject completed work
  • Leave reviews and ratings for contractors

πŸ”¨ Contractor Panel

  • Browse open projects with search and filters
  • Submit structured quotes (pricing, materials, timeline, notes, PDF upload)
  • Track awarded projects and milestones
  • Submit milestones for builder review
  • View earned NFT completion certificates
  • Leave reviews and ratings for builders

πŸ€– AI-Powered Tools (Edge Functions)

  • Quote Analysis β€” AI compares quotes highlighting pros, cons, and value
  • Risk Assessment β€” evaluates project risk based on scope, budget, timeline
  • Contract Draft Generator β€” auto-generates contract from project + quote details

πŸ—οΈ BIM 3D Viewer

  • Upload and display IFC/3D model files (Three.js + React Three Fiber)
  • Pan, zoom, rotate controls
  • Milestone tagging on 3D model geometry
  • Annotations with position markers
  • Model comparison view

⛓️ Blockchain Escrow (Sepolia Testnet)

  • MetaMask wallet connection with address persistence
  • Milestone-based ETH deposits into smart contract
  • Fund release upon milestone approval
  • Dispute mechanism with owner resolution
  • Transaction history with Etherscan links
  • NFT completion certificates (ERC-721) viewable on Etherscan

πŸ’¬ Real-Time Messaging

  • Project-based chat between builder and contractor
  • File attachments in messages
  • Real-time updates via Supabase Realtime

⭐ Reviews & Reputation

  • Post-project ratings (1–5 stars) with comments
  • Verified badge for users with β‰₯4.0 avg rating
  • Public profile pages with review history

πŸ‘₯ User Directory

  • Browse all builders and contractors
  • Filter by role (Builder / Contractor)
  • Search by company name
  • View ratings and verified status

πŸ”” Notifications

  • In-app notifications for key events
  • New quote, milestone approved, payment released alerts
  • Bell icon with unread count

πŸ› οΈ Tools & Technologies

Layer Technology
Frontend React 18, TypeScript, Vite 5
UI Tailwind CSS 3, shadcn/ui, Radix UI, Framer Motion
3D Rendering Three.js, React Three Fiber, web-ifc
State Management TanStack React Query, React Context
Backend Supabase (PostgreSQL, Auth, Storage, Edge Functions, Realtime)
Blockchain Solidity 0.8.20, Ethers.js 6, Sepolia Testnet
AI Lovable AI Gateway (GPT/Gemini models via Edge Functions)
Routing React Router DOM v6
Forms React Hook Form + Zod validation
Charts Recharts
Drag & Drop @dnd-kit (milestone reordering)

πŸ“ Folder Structure

conquote-connect/
β”œβ”€β”€ contracts/
β”‚   β”œβ”€β”€ MilestoneEscrow.sol              # Solidity escrow smart contract
β”‚   └── MilestoneCertificateNFT.sol      # ERC-721 NFT certificate contract
β”œβ”€β”€ public/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ ui/                          # shadcn/ui components (40+ components)
β”‚   β”‚   β”œβ”€β”€ AppHeader.tsx                # Navigation header with theme toggle
β”‚   β”‚   β”œβ”€β”€ AppSidebar.tsx               # Dashboard sidebar navigation
β”‚   β”‚   β”œβ”€β”€ BimViewer.tsx                # 3D BIM model viewer (Three.js)
β”‚   β”‚   β”œβ”€β”€ BimAnnotations.tsx           # 3D model annotations
β”‚   β”‚   β”œβ”€β”€ BimCompareView.tsx           # BIM model comparison
β”‚   β”‚   β”œβ”€β”€ DashboardLayout.tsx          # Protected layout wrapper
β”‚   β”‚   β”œβ”€β”€ DropZone.tsx                 # Drag-and-drop file upload
β”‚   β”‚   β”œβ”€β”€ NFTCertificateDisplay.tsx    # NFT certificate viewer
β”‚   β”‚   β”œβ”€β”€ OnChainEscrow.tsx            # Blockchain escrow UI
β”‚   β”‚   β”œβ”€β”€ ProjectChat.tsx              # Real-time messaging
β”‚   β”‚   β”œβ”€β”€ ProjectFileGallery.tsx       # Project file management
β”‚   β”‚   β”œβ”€β”€ ProtectedRoute.tsx           # Auth route guard
β”‚   β”‚   β”œβ”€β”€ TransactionHistory.tsx       # Escrow transaction log
β”‚   β”‚   β”œβ”€β”€ WalletConnect.tsx            # MetaMask wallet connection
β”‚   β”‚   β”œβ”€β”€ NotificationBell.tsx         # Notification bell with badge
β”‚   β”‚   β”œβ”€β”€ ThemeProvider.tsx            # Dark/light theme provider
β”‚   β”‚   └── ThemeToggle.tsx              # Theme toggle button
β”‚   β”œβ”€β”€ contexts/
β”‚   β”‚   └── AuthContext.tsx              # Auth + role context provider
β”‚   β”œβ”€β”€ hooks/
β”‚   β”‚   └── use-mobile.tsx               # Responsive breakpoint hook
β”‚   β”œβ”€β”€ integrations/
β”‚   β”‚   └── supabase/                    # Auto-generated client & types
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   β”œβ”€β”€ escrowContract.ts            # Smart contract ABI & address
β”‚   β”‚   β”œβ”€β”€ nftContract.ts               # NFT contract ABI & address
β”‚   β”‚   β”œβ”€β”€ notifications.ts             # Notification helper functions
β”‚   β”‚   └── utils.ts                     # Utility functions (cn, etc.)
β”‚   β”œβ”€β”€ pages/
β”‚   β”‚   β”œβ”€β”€ Landing.tsx                  # Public landing page (3D globe)
β”‚   β”‚   β”œβ”€β”€ Auth.tsx                     # Login / Signup page
β”‚   β”‚   β”œβ”€β”€ SelectRole.tsx               # Role selection (Builder/Contractor)
β”‚   β”‚   β”œβ”€β”€ BuilderDashboard.tsx         # Builder overview dashboard
β”‚   β”‚   β”œβ”€β”€ ContractorDashboard.tsx      # Contractor overview dashboard
β”‚   β”‚   β”œβ”€β”€ CreateProject.tsx            # New project creation form
β”‚   β”‚   β”œβ”€β”€ ProjectDetail.tsx            # Full project view with tabs
β”‚   β”‚   β”œβ”€β”€ BrowseProjects.tsx           # Contractor project search
β”‚   β”‚   β”œβ”€β”€ SubmitQuote.tsx              # Quote submission form
β”‚   β”‚   β”œβ”€β”€ Milestones.tsx               # Milestone tracker (drag & drop)
β”‚   β”‚   β”œβ”€β”€ EscrowDashboard.tsx          # Blockchain escrow management
β”‚   β”‚   β”œβ”€β”€ AITools.tsx                  # AI analysis tools
β”‚   β”‚   β”œβ”€β”€ Profile.tsx                  # User profile settings
β”‚   β”‚   β”œβ”€β”€ PublicProfile.tsx            # Public user profile with reviews
β”‚   β”‚   β”œβ”€β”€ UserDirectory.tsx            # Browse all users
β”‚   β”‚   β”œβ”€β”€ Messages.tsx                 # Chat interface
β”‚   β”‚   └── Notifications.tsx            # Notification center
β”‚   β”œβ”€β”€ App.tsx                          # Route configuration
β”‚   └── main.tsx                         # Entry point
β”œβ”€β”€ supabase/
β”‚   β”œβ”€β”€ functions/
β”‚   β”‚   β”œβ”€β”€ ai-tools/index.ts            # AI edge function (quote/risk/contract)
β”‚   β”‚   └── escrow-notify/index.ts       # Escrow notification function
β”‚   β”œβ”€β”€ migrations/                      # Database migration files
β”‚   └── config.toml                      # Supabase configuration
β”œβ”€β”€ package.json
β”œβ”€β”€ tailwind.config.ts
β”œβ”€β”€ vite.config.ts
└── tsconfig.json

πŸ“Š Database Schema

Table Purpose
profiles User profile info (company, contact, avatar, wallet address)
user_roles Role assignment (builder / contractor) β€” enum-based
projects Project listings with budget, timeline, BIM files
quotes Contractor quote submissions with pricing & materials
milestones Project milestones with status tracking & amounts
messages Real-time project chat messages with file attachments
project_files Uploaded project documents and attachments
model_annotations 3D model annotation markers (x, y, z positions)
notifications In-app notification records with read status
reviews Post-project ratings (1–5) and comments
escrow_transactions On-chain escrow deposit/release transaction records
nft_certificates Minted NFT certificate records with token IDs

All tables use Row-Level Security (RLS) policies to ensure data access control. Security-definer functions (has_role, is_accepted_contractor) prevent RLS recursion.


πŸ“„ Pages & Navigation

Page Route Access
Landing Page / Public
Login / Sign Up /auth Public
Role Selection /select-role Authenticated
Builder Dashboard /builder Builder only
Create Project /builder/create-project Builder only
Contractor Dashboard /contractor Contractor only
Browse Projects /contractor/browse Contractor only
Project Detail /projects/:id Authenticated
Submit Quote /projects/:id/submit-quote Contractor only
Milestone Tracker /milestones Authenticated
Escrow Dashboard /escrow Authenticated
AI Tools /ai-tools Authenticated
Profile Settings /profile Authenticated
Public Profile /user/:userId Authenticated
User Directory /directory Authenticated
Messages /messages Authenticated
Notifications /notifications Authenticated
BIM Test /bim-test Public

πŸš€ Getting Started

Prerequisites

  • Node.js β‰₯ 18 (install via nvm)
  • npm or bun package manager
  • MetaMask browser extension (for blockchain features)
  • Git for version control

Installation

# 1. Clone the repository
git clone <YOUR_GIT_URL>
cd conquote-connect

# 2. Install dependencies
npm install

# 3. Set up environment variables
# Create a .env file with:
# VITE_SUPABASE_URL=your_supabase_url
# VITE_SUPABASE_PUBLISHABLE_KEY=your_supabase_anon_key

# 4. Start the development server
npm run dev

The app will be available at http://localhost:5173

Dependencies

Key dependencies installed automatically via npm install:

  • react, react-dom β€” UI framework
  • react-router-dom β€” Client-side routing
  • @supabase/supabase-js β€” Backend client
  • @tanstack/react-query β€” Server state management
  • three, @react-three/fiber, @react-three/drei β€” 3D rendering
  • ethers β€” Ethereum blockchain interaction
  • framer-motion β€” Animations
  • recharts β€” Charts and data visualization
  • react-hook-form, zod β€” Form handling and validation
  • @dnd-kit/core, @dnd-kit/sortable β€” Drag and drop
  • Full list in package.json

Smart Contract Deployment (Optional)

  1. Go to Remix IDE
  2. Create new files, paste contracts/MilestoneEscrow.sol and contracts/MilestoneCertificateNFT.sol
  3. Compile with Solidity 0.8.20+
  4. Deploy to Sepolia testnet (select "Injected Provider - MetaMask")
  5. Copy the deployed contract addresses to src/lib/escrowContract.ts and src/lib/nftContract.ts
  6. Get free test ETH from sepoliafaucet.com

πŸ§ͺ Running Tests

npm run test

πŸ§‘β€πŸ’» How It Works β€” End-to-End Workflow

  1. Sign up β†’ verify email β†’ choose your role (Builder or Contractor)
  2. Builder creates a project with budget, timeline, location, and optional BIM files
  3. Contractors browse open projects and submit structured quotes with pricing breakdown
  4. Builder reviews quotes, uses AI tools for analysis/risk/contract generation
  5. Builder awards the project to a contractor
  6. Milestones are created β€” contractors submit work, builders approve or reject with comments
  7. Escrow β€” Builder connects MetaMask, deposits ETH per milestone into the smart contract
  8. Fund Release β€” Upon milestone approval, builder releases locked ETH to contractor
  9. Reviews β€” Both parties rate each other after project completion
  10. NFT Certificate β€” Contractor and builder mint ERC-721 certificates as immutable proof of completion
  11. Reputation β€” Verified badges appear for users with strong review history

πŸŽ“ Workshop Delivery

This project is structured as a workshop-ready, sellable learning experience:

  • Target Audience: CS/IT students, web dev learners, blockchain beginners
  • Duration: 4–6 hour hands-on workshop
  • Modules: React setup β†’ Supabase backend β†’ CRUD panels β†’ AI integration β†’ BIM viewer β†’ Blockchain escrow
  • See Workshop_Outline.md for the complete workshop structure

πŸ“Ž Links

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors