# waliulnizu/artisano-client architecture

> Architecture diagram of the GitHub repository waliulnizu/artisano-client, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/waliulnizu/artisano-client
- Repository: https://github.com/waliulnizu/artisano-client

## Overview

Artisano is a client for a digital-art marketplace. Collectors discover art, inspect a work and its community feedback, then purchase it or join a membership; artists publish work and monitor sales, while admins manage users and analytics. The map groups the app by those product workflows and includes the shared dashboard and authentication layers. The repository is frontend-only: API and payment behavior is represented as external services based on README documentation; several route-to-feature links are documented capabilities rather than inspected implementation.

Main entry points: [`src/app/artwork/[id]/page.js`](https://github.com/waliulnizu/artisano-client/blob/main/src/app/artwork/%5Bid%5D/page.js) (Artwork detail), [`src/hooks/useArtworkDetails.js`](https://github.com/waliulnizu/artisano-client/blob/main/src/hooks/useArtworkDetails.js) (Artwork data & ownership), [`src/app/dashboard/page.jsx`](https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/page.jsx) (Role dashboard), [`src/lib/auth-client.js`](https://github.com/waliulnizu/artisano-client/blob/main/src/lib/auth-client.js) (Auth client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity &amp; entry"]
  node_auth_pages["Sign in / register<br/>[page.jsx]"]
  node_google_auth["Google sign-in"]
  node_auth_client["Auth client<br/>[auth-client.js]"]
end

subgraph group_discovery["Art discovery"]
  node_home["Marketplace home<br/>[page.js]"]
  node_browse["Gallery browse<br/>[page.jsx]"]
  node_artists["Artist directory &amp; profile<br/>[page.jsx]"]
  node_art_detail["Artwork detail<br/>[page.js]"]
  node_artwork_hook["Artwork data &amp; ownership"]
end

subgraph group_commerce["Purchases &amp; membership"]
  node_purchase_card["Artwork purchase"]
  node_purchase_success["Purchase confirmation<br/>[page.jsx]"]
  node_premium["Membership plans<br/>[page.jsx]"]
  node_vip_room["VIP room<br/>[page.jsx]"]
end

subgraph group_engagement["Community features"]
  node_reviews["Reviews<br/>[ReviewSection.jsx]"]
  node_comments["Artwork comments<br/>[CommentSection.jsx]"]
  node_wishlist["Wishlist<br/>[WishlistButton.jsx]"]
end

subgraph group_workspace["Role workspaces"]
  node_dashboard["Role dashboard<br/>[page.jsx]"]
  node_collector["Collector overview &amp; vault"]
  node_transactions["Purchase history<br/>[page.jsx]"]
  node_artist_assets["Artist asset studio<br/>[page.jsx]"]
  node_upload["Artwork publishing<br/>[page.js]"]
  node_admin["Admin analytics &amp; controls<br/>[page.jsx]"]
end

node_visitor(("Visitor / member"))
node_auth_service["Auth API / Better Auth"]
node_content_api["Content API"]
node_stripe_api["Stripe API"]
node_dashboard_api["Dashboard API"]

node_visitor -->|"visits"| node_home
node_visitor -->|"authenticates"| node_auth_pages
node_auth_pages -->|"starts Google sign-in"| node_auth_client
node_google_auth -->|"invokes"| node_auth_client
node_auth_client -->|"creates session"| node_auth_service
node_visitor -->|"searches gallery"| node_browse
node_browse -->|"fetches filtered art"| node_content_api
node_visitor -->|"views creators"| node_artists
node_visitor -->|"opens artwork"| node_art_detail
node_art_detail -.->|"loads details"| node_artwork_hook
node_artwork_hook -->|"checks current user"| node_auth_service
node_artwork_hook -->|"fetches artwork"| node_content_api
node_artwork_hook -->|"checks ownership"| node_stripe_api
node_art_detail -.->|"shows reviews"| node_reviews
node_art_detail -.->|"shows comments"| node_comments
node_art_detail -.->|"offers saving"| node_wishlist
node_reviews -->|"reads and submits"| node_reviews
node_visitor -->|"buys artwork"| node_purchase_card
node_purchase_card -.->|"creates checkout"| node_stripe_api
node_stripe_api -.->|"confirms payment"| node_purchase_success
node_visitor -->|"chooses membership"| node_premium
node_premium -.->|"starts subscription"| node_stripe_api
node_visitor -->|"enters premium area"| node_vip_room
node_visitor -->|"opens workspace"| node_dashboard
node_dashboard -->|"loads identity"| node_auth_service
node_dashboard -->|"renders collector view"| node_collector
node_dashboard -->|"verifies membership"| node_dashboard_api
node_collector -->|"links purchase history"| node_transactions
node_visitor -->|"manages artwork"| node_artist_assets
node_artist_assets -->|"manages published assets"| node_content_api
node_visitor -->|"publishes artwork"| node_upload
node_upload -->|"creates artwork"| node_content_api
node_visitor -->|"manages platform"| node_admin
node_admin -->|"loads analytics"| node_dashboard_api

click node_auth_pages "https://github.com/waliulnizu/artisano-client/blob/main/src/app/(auth)/login/page.jsx"
click node_google_auth "https://github.com/waliulnizu/artisano-client/blob/main/src/components/auth/GoogleAuthButton.jsx"
click node_auth_client "https://github.com/waliulnizu/artisano-client/blob/main/src/lib/auth-client.js"
click node_home "https://github.com/waliulnizu/artisano-client/blob/main/src/app/page.js"
click node_browse "https://github.com/waliulnizu/artisano-client/blob/main/src/app/browse/page.jsx"
click node_artists "https://github.com/waliulnizu/artisano-client/blob/main/src/app/artists/page.jsx"
click node_art_detail "https://github.com/waliulnizu/artisano-client/blob/main/src/app/artwork/%5Bid%5D/page.js"
click node_artwork_hook "https://github.com/waliulnizu/artisano-client/blob/main/src/hooks/useArtworkDetails.js"
click node_reviews "https://github.com/waliulnizu/artisano-client/blob/main/src/components/review/ReviewSection.jsx"
click node_comments "https://github.com/waliulnizu/artisano-client/blob/main/src/components/comment/CommentSection.jsx"
click node_wishlist "https://github.com/waliulnizu/artisano-client/blob/main/src/components/wishlist/WishlistButton.jsx"
click node_purchase_card "https://github.com/waliulnizu/artisano-client/blob/main/src/components/artwork/ArtworkPurchaseCard.jsx"
click node_purchase_success "https://github.com/waliulnizu/artisano-client/blob/main/src/app/purchase/success/page.jsx"
click node_premium "https://github.com/waliulnizu/artisano-client/blob/main/src/app/premium/page.jsx"
click node_vip_room "https://github.com/waliulnizu/artisano-client/blob/main/src/app/vip-room/page.jsx"
click node_dashboard "https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/page.jsx"
click node_collector "https://github.com/waliulnizu/artisano-client/blob/main/src/components/dashboard/CollectorOverview.jsx"
click node_transactions "https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/transactions/page.jsx"
click node_artist_assets "https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/my-assets/page.jsx"
click node_upload "https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/upload/page.js"
click node_admin "https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/admin-panel/page.jsx"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_auth_pages,node_google_auth,node_auth_client toneBlue
class node_home,node_browse,node_artists,node_art_detail,node_artwork_hook toneAmber
class node_purchase_card,node_purchase_success,node_premium,node_vip_room,node_auth_service,node_content_api,node_stripe_api,node_dashboard_api toneMint
class node_reviews,node_comments,node_wishlist toneRose
class node_dashboard,node_collector,node_transactions,node_artist_assets,node_upload,node_admin,node_visitor toneIndigo
```

## Components

### Identity & entry

- [Sign in / register](https://github.com/waliulnizu/artisano-client/blob/main/src/app/(auth)/login/page.jsx): `src/app/(auth)/login/page.jsx`
- [Google sign-in](https://github.com/waliulnizu/artisano-client/blob/main/src/components/auth/GoogleAuthButton.jsx): `src/components/auth/GoogleAuthButton.jsx`
- [Auth client](https://github.com/waliulnizu/artisano-client/blob/main/src/lib/auth-client.js): `src/lib/auth-client.js`

### Art discovery

- [Marketplace home](https://github.com/waliulnizu/artisano-client/blob/main/src/app/page.js): `src/app/page.js`
- [Gallery browse](https://github.com/waliulnizu/artisano-client/blob/main/src/app/browse/page.jsx): `src/app/browse/page.jsx`
- [Artist directory & profile](https://github.com/waliulnizu/artisano-client/blob/main/src/app/artists/page.jsx): `src/app/artists/page.jsx`
- [Artwork detail](https://github.com/waliulnizu/artisano-client/blob/main/src/app/artwork/%5Bid%5D/page.js): `src/app/artwork/[id]/page.js`
- [Artwork data & ownership](https://github.com/waliulnizu/artisano-client/blob/main/src/hooks/useArtworkDetails.js): `src/hooks/useArtworkDetails.js`

### Purchases & membership

- [Artwork purchase](https://github.com/waliulnizu/artisano-client/blob/main/src/components/artwork/ArtworkPurchaseCard.jsx): `src/components/artwork/ArtworkPurchaseCard.jsx`
- [Purchase confirmation](https://github.com/waliulnizu/artisano-client/blob/main/src/app/purchase/success/page.jsx): `src/app/purchase/success/page.jsx`
- [Membership plans](https://github.com/waliulnizu/artisano-client/blob/main/src/app/premium/page.jsx): `src/app/premium/page.jsx`
- [VIP room](https://github.com/waliulnizu/artisano-client/blob/main/src/app/vip-room/page.jsx): `src/app/vip-room/page.jsx`

### Community features

- [Reviews](https://github.com/waliulnizu/artisano-client/blob/main/src/components/review/ReviewSection.jsx): `src/components/review/ReviewSection.jsx`
- [Artwork comments](https://github.com/waliulnizu/artisano-client/blob/main/src/components/comment/CommentSection.jsx): `src/components/comment/CommentSection.jsx`
- [Wishlist](https://github.com/waliulnizu/artisano-client/blob/main/src/components/wishlist/WishlistButton.jsx): `src/components/wishlist/WishlistButton.jsx`

### Role workspaces

- [Role dashboard](https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/page.jsx): `src/app/dashboard/page.jsx`
- [Collector overview & vault](https://github.com/waliulnizu/artisano-client/blob/main/src/components/dashboard/CollectorOverview.jsx): `src/components/dashboard/CollectorOverview.jsx`
- [Purchase history](https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/transactions/page.jsx): `src/app/dashboard/transactions/page.jsx`
- [Artist asset studio](https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/my-assets/page.jsx): `src/app/dashboard/my-assets/page.jsx`
- [Artwork publishing](https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/upload/page.js): `src/app/dashboard/upload/page.js`
- [Admin analytics & controls](https://github.com/waliulnizu/artisano-client/blob/main/src/app/dashboard/admin-panel/page.jsx): `src/app/dashboard/admin-panel/page.jsx`

### Other components

- **Visitor / member**
- **Auth API / Better Auth**
- **Content API**
- **Stripe API**
- **Dashboard API**

## Connections

- Visitor / member → Marketplace home: visits
- Visitor / member → Sign in / register: authenticates
- Sign in / register → Auth client: starts Google sign-in (evidence: `src/app/(auth)/login/page.jsx`)
- Google sign-in → Auth client: invokes (evidence: `src/components/auth/GoogleAuthButton.jsx`)
- Auth client → Auth API / Better Auth: creates session (evidence: `src/lib/auth-client.js`)
- Visitor / member → Gallery browse: searches gallery
- Gallery browse → Content API: fetches filtered art (evidence: `src/app/browse/page.jsx`)
- Visitor / member → Artist directory & profile: views creators
- Visitor / member → Artwork detail: opens artwork
- Artwork detail → Artwork data & ownership: loads details
- Artwork data & ownership → Auth API / Better Auth: checks current user (evidence: `src/hooks/useArtworkDetails.js`)
- Artwork data & ownership → Content API: fetches artwork (evidence: `src/hooks/useArtworkDetails.js`)
- Artwork data & ownership → Stripe API: checks ownership (evidence: `src/hooks/useArtworkDetails.js`)
- Artwork detail → Reviews: shows reviews
- Artwork detail → Artwork comments: shows comments
- Artwork detail → Wishlist: offers saving
- Reviews → Reviews: reads and submits (evidence: `src/components/review/ReviewSection.jsx`)
- Visitor / member → Artwork purchase: buys artwork
- Artwork purchase → Stripe API: creates checkout
- Stripe API → Purchase confirmation: confirms payment
- Visitor / member → Membership plans: chooses membership
- Membership plans → Stripe API: starts subscription
- Visitor / member → VIP room: enters premium area
- Visitor / member → Role dashboard: opens workspace
- Role dashboard → Auth API / Better Auth: loads identity (evidence: `src/app/dashboard/page.jsx`)
- Role dashboard → Collector overview & vault: renders collector view (evidence: `src/app/dashboard/page.jsx`)
- Role dashboard → Dashboard API: verifies membership (evidence: `src/app/dashboard/page.jsx`)
- Collector overview & vault → Purchase history: links purchase history
- Visitor / member → Artist asset studio: manages artwork
- Artist asset studio → Content API: manages published assets
- Visitor / member → Artwork publishing: publishes artwork
- Artwork publishing → Content API: creates artwork
- Visitor / member → Admin analytics & controls: manages platform
- Admin analytics & controls → Dashboard API: loads analytics
