Find and connect with trusted local artisans through a community-powered Stellar ecosystem.
Project Ecosystem · Frontend Routes · Issue Labels · Getting Started · Contributing
Artisyn is a decentralised protocol built on Stellar that connects local artisans with users through community-curated listings. It gives skilled workers a place to be discovered, verified, and compensated while helping users find trusted services in their communities.
The frontend uses the Next.js App Router. Pages and API handlers live under src/app, shared interface components under src/components, feature-specific modules under src/features, and integrations or utilities under src/lib.
src/
├── app/ # Pages, layouts, route groups, and API handlers
├── components/ # Shared UI and domain components
├── context/ # React context providers
├── features/ # Feature-specific frontend modules
├── icons/ # Shared icon components
└── lib/ # API helpers, Stellar integration, and utilities
The route groups in parentheses, such as (auth) and (dashboard), organise the source tree but do not appear in the browser URL.
- Available means a page exists on the default branch. It does not imply that every backend integration or access guard is complete.
- Planned means the route is described by an open tracking issue but is not yet present on the default branch.
- Development means the route is intended for component testing or previewing rather than normal product navigation.
| URL | Source | Purpose | Status |
|---|---|---|---|
/ |
src/app/page.tsx |
Landing and artisan discovery | Available |
/search |
src/app/search/page.tsx |
Search and filter artisan profiles | Available |
/artisans/[id] |
src/app/artisans/[id]/page.tsx |
Public artisan profile | Available |
/for-artisans |
src/app/for-artisans/page.tsx |
Artisan-focused product introduction | Available |
/how-it-works |
src/app/how-it-works/page.tsx |
Platform workflow for clients and artisans | Available |
/contact |
src/app/contact/page.tsx |
Contact and support information | Available |
/privacy |
src/app/privacy/page.tsx |
Privacy policy | Available |
/terms |
src/app/terms/page.tsx |
Terms and conditions | Available |
| URL | Source | Purpose | Status |
|---|---|---|---|
/connect-wallet |
src/app/(auth)/connect-wallet/page.tsx |
Connect a Stellar wallet | Available |
/account-type |
src/app/(auth)/account-type/page.tsx |
Choose an account role | Available |
/profile-setup |
src/app/(auth)/profile-setup/page.tsx |
Complete an artisan profile | Available |
/client/account-completion |
src/app/(onboarding)/client/account-completion/page.tsx |
Complete client onboarding | Available |
Profile setup is currently a single route. Work to split it into resumable steps is tracked in #112.
| URL | Source | Purpose | Status |
|---|---|---|---|
/artisan/dashboard |
src/app/(dashboard)/artisan/dashboard/page.tsx |
Artisan metrics and activity overview | Available |
/artisan/jobs |
src/app/(dashboard)/artisan/jobs/page.tsx |
Browse available jobs | Available |
/artisan/jobs/[id] |
src/app/(dashboard)/artisan/jobs/[id]/page.tsx |
View a single job | Available |
/artisan/listings |
src/app/(dashboard)/artisan/listings/page.tsx |
Review available, applied, and completed jobs | Available |
/artisan/profile |
src/app/(dashboard)/artisan/profile/page.tsx |
Manage the artisan profile | Available |
/artisan/settings |
src/app/(dashboard)/artisan/settings/page.tsx |
Manage account preferences and privacy | Available |
/artisan/help |
src/app/(dashboard)/artisan/help/page.tsx |
Access help and support resources | Available |
The artisan dashboard shares src/app/(dashboard)/artisan/layout.tsx. Authentication and role protection are tracked separately in #119 and #120.
| Planned URL | Target source | Tracking issue | Status |
|---|---|---|---|
/client/dashboard |
src/app/(dashboard)/client/dashboard/page.tsx |
#108 | Planned |
/client/saved-artisans |
src/app/(dashboard)/client/saved-artisans/page.tsx |
#109 | Planned |
/client/applications |
src/app/(dashboard)/client/applications/page.tsx |
#110 | Planned |
/client/settings |
src/app/(dashboard)/client/settings/page.tsx |
#111 | Planned |
| Planned URL | Target source | Tracking issue | Status |
|---|---|---|---|
/admin/curator-verifications |
src/app/(dashboard)/admin/curator-verifications/page.tsx |
#126 | Planned |
/admin/reviews |
src/app/(dashboard)/admin/reviews/page.tsx |
#127 | Planned |
/admin/analytics |
src/app/(dashboard)/admin/analytics/page.tsx |
#128 | Planned |
| URL | Source | Purpose | Status |
|---|---|---|---|
/component-tests/application-timeline |
src/app/component-tests/application-timeline/page.tsx |
Application timeline test page | Development |
/component-tests/document-uploader |
src/app/component-tests/document-uploader/page.tsx |
Document uploader test page | Development |
/components-preview/search-controls |
src/app/components-preview/search-controls/page.tsx |
Search controls preview | Development |
Frontend labels are designed to be combined. Start with the work type, add the relevant product area, and then use the phase label to understand the task's role in the delivery sequence. The complete set is available on the repository's labels page.
| Label | Use it for |
|---|---|
frontend |
Any user-facing frontend work |
nextjs |
Next.js-specific pages, routing, layouts, or framework work |
docs |
Documentation changes |
contributor-experience |
Work that improves contributor onboarding or workflows |
| Labels | Area |
|---|---|
auth, onboarding, wallet |
Authentication, role selection, onboarding, and wallet connection |
dashboard, admin, client |
Role-specific dashboards and administration |
jobs, applications, profiles |
Jobs, applications, and artisan profile flows |
search, settings, support |
Search, account settings, and support experience |
payments, reviews, verification |
Payments, trust, reviews, and verification workflows |
design-system, responsive, ux |
Shared interface quality and user experience |
| Label | Typical scope |
|---|---|
phase:foundation |
Shared foundations, guards, clients, or architecture |
phase:core |
Core user-facing flows and pages |
phase:components |
Reusable UI components |
phase:integration |
API and data integration |
phase:ux |
Interaction, navigation, feedback, or responsive polish |
phase:content |
Product content and informational pages |
phase:ops |
Documentation and contributor operations |
phase:moderation, phase:analytics, phase:compliance |
Moderation, analytics, or compliance-specific work |
| Label | Meaning |
|---|---|
good first issue |
A scoped starting point for new contributors |
help wanted |
An issue where external contribution is welcome |
Stellar Wave |
An issue participating in the Stellar Wave program |
Non-rewarded |
An issue that does not carry a contribution reward |
For example:
- Authentication infrastructure may use
frontend,auth, andphase:foundation. - An admin analytics page may use
frontend,admin, andphase:analytics. - Contributor documentation may use
frontend,docs, andphase:ops.
- Start with the open frontend issues.
- Select a product-area label that matches the part of the application you want to work on.
- Use the
phase:*label and the issue'sDepends onsection to understand sequencing. - Check assignees and recent discussion before beginning implementation.
- Read the issue's acceptance criteria, branch name, and suggested PR title.
- Confirm program and reward conditions on the issue itself; a label does not replace the assignment or completion rules of that program.
git clone https://github.com/artisyn-io/artisyn.io.git
cd artisyn.io
pnpm install --frozen-lockfile
pnpm devOpen http://localhost:3000 in your browser. The landing page is implemented in src/app/page.tsx.
| Command | Purpose |
|---|---|
pnpm dev |
Start the development server |
pnpm lint |
Run ESLint |
pnpm build |
Create a production build |
pnpm start |
Serve the production build |
- Choose an open issue and read its requirements, dependencies, and submission guidelines.
- Create the branch requested by the issue, or use a short branch name that describes the task when none is provided.
- Make the smallest complete change that satisfies the acceptance criteria.
- Run the relevant verification commands, including
pnpm lintandpnpm buildfor frontend changes when applicable. - Open a focused pull request with a summary, verification notes, and any known limitations.
- Link the pull request to its issue with a closing keyword such as
Closes #123.
Keep pull requests focused. If you discover an unrelated bug or missing route while working, open or reference a separate issue instead of expanding the current change without agreement.