Ethwork

Task-based Web3 jobs with PYUSD escrow, wallet-ready UI, and a local-storage MVP.

Ethwork

Created At

ETHOnline 2025

Project Description

EthWork is a modern Web3 job platform that focuses on task-based work and milestone escrow so developers get paid fairly and on time. The MVP ships a polished, responsive frontend where employers can post roles, candidates can search/filter jobs by skills and salary, and both sides see transparent milestone statuses. Payments are modeled around PYUSD (stablecoin) and escrowed milestones (concept in MVP), with a wallet-ready UI and a clear path to on-chain settlement. This version stores data in the browser via localStorage for a zero-backend demo: post a job, it appears instantly in listings; save jobs, apply, and view a lightweight dashboard—everything persists across refreshes. The UI prioritizes clarity, accessibility, and speed with a clean, professional visual system.

How it's Made

Framework & UI

Next.js (App Router) + React 18 for routing and server/client components.

Tailwind CSS + shadcn/ui for a consistent, accessible component system.

Motion-ready with Framer Motion patterns (fade-up, hover-lift), kept optional.

State & Data

Lightweight state via React hooks (useState, useMemo, useEffect).

localStorage as the persistence layer (lib/storage.ts) with typed helpers and simple versioning.

Seed data on first run; keys like ethwork_jobs, ethwork_companies, ethwork_applications.

Domain Models

Job, Company, Milestone, Application, Contract, Payout TypeScript interfaces in lib/types.ts.

Post-a-Job form writes to localStorage; Jobs page reads + filters in real time.

Search & Filters

Text search across role/company/description.

Skill-tag multi-select (chip input).

Robust salary parser supporting $120,000–$150,000, 120k–150k, 100k+, Up to 90k, etc.; handles single-bound values by setting min=max; uses range-overlap logic so realistic matches aren’t excluded.

Wallet-ready UX

WalletBadge and WalletButton components prepared for wagmi/viem or ConnectKit/RainbowKit.

Network hinting (e.g., “Sepolia • Beta”) wired for later chain detection.

Pages & Flows

Landing, How-It-Works, Jobs (list/detail), Companies (list/detail), Post Job, Developer Dashboard, Support.

Clear CTA flow: browse → filter → view details → save/apply (local).

Accessibility & DX

Semantic HTML, focus rings, color contrast ≥4.5:1, keyboard-friendly.

TypeScript strict mode for safer refactors.

Notable/Hacky bits (worth mentioning)

Salary parsing is resilient to messy input and international punctuation.

LocalStorage as a mini-DB with key namespacing + simple schema versioning for forward compatibility.

Optimistic UI: instant updates to lists after posting/applying to simulate on-chain TX success; easy to swap for real APIs or contract calls.

Feature flags (featureFlags.ts) to toggle charity/disputes/beta banners without code churn.

Upgrade path

Replace storage with Supabase/REST/GraphQL or on-chain indexer.

Wire PYUSD approvals + milestone releases via wagmi/viem on Sepolia first, then mainnet.

Add verification, messaging, disputes, and on-chain reputation badges.

background image mobile

Join the mailing list

Get the latest news and updates