Self-hosted platform for artists. Blog, newsletter, and NFT storefront — no frameworks, no build tools, no dependencies.
- Blog — Markdown posts with slug-based URLs, create/edit/delete from the frontend
- Newsletter — Email subscribe with double opt-in, drip sequence, admin management
- NFT Storefront — Sui blockchain + Walrus storage, USDC payments, collection/piece pages
- Admin Dashboard — Manage emails, subscribers, collections, and NFTs behind a password login
- Privacy & Compliance — Auto-generated privacy policy, unsubscribe tokens, GDPR-friendly
PHP + SQLite + Sui Move + Walrus + ElasticEmail. All vanilla, zero dependencies.
git clone https://github.com/AleBlom/artistier.git
cd artistier├── config/ ← configuration
├── contract/ ← Sui Move smart contract
├── cron/ ← email drip cron script
├── logs/ ← log files (auto-created)
└── public/ ← web root
├── api/ ← JSON API endpoints
├── css/ ← stylesheets
├── db/ ← SQLite database + init script
├── js/ ← frontend scripts
└── img/ ← favicon + uploads
Option A: VPS / Dedicated Server — Point your Apache DocumentRoot to the public/ directory. Everything works out of the box.
Option B: Shared Hosting — Copy everything into your web root:
public_html/ ← your web root
├── config/ ← auto-protected by .htaccess
├── cron/ ← auto-protected by .htaccess
├── logs/ ← auto-protected by .htaccess
├── .htaccess
├── bootstrap.php
├── index.php
├── api/
├── css/
├── db/
├── js/
└── img/
A bootstrap.php auto-detects which layout you're using. Sensitive directories (config/, cron/, logs/) are protected by both their own .htaccess deny rules and rewrite rules in the main .htaccess.
-
Copy config files:
cp config/site.example.php config/site.php cp config/email.example.php config/email.php cp config/nft.example.php config/nft.php cp config/homepage.example.php config/homepage.php
-
Edit
config/site.phpwith your name, domain, tagline, and social links. -
Init the database:
php public/db/init.php # Option A php db/init.php # Option B (shared hosting)
-
Add your profile picture at
img/pfp.jpg(in your web root). -
Visit your site. Log in with password
changeme, then change it immediately.
| File | What it does |
|---|---|
config/site.php |
Site name, tagline, domain, legal info, social links |
config/email.php |
ElasticEmail API key, sender address |
config/nft.php |
Sui network, contract IDs, Walrus URLs, storefront info |
config/homepage.php |
Custom HTML sections on the homepage (commissions, exhibitions, etc.) |
-
Sign up at ElasticEmail and get an API key.
-
Fill in
config/email.phpwith your API key and sender address. -
Set up a daily cron job:
0 9 * * * php /path/to/cron/email-sequence.php -
Create your drip emails in the admin dashboard under Email Sequence.
Requires Sui CLI.
-
Deploy the contract:
cd contract sui client publish --gas-budget 100000000 -
Copy the output IDs into
config/nft.php:SUI_PACKAGE_ID— the published packageSUI_MARKETPLACE_ID— the shared Marketplace objectSUI_ADMIN_ADDRESS— your wallet addressSUI_ADMIN_CAP_ID— the AdminCap object
-
Switch to mainnet when ready: update
SUI_NETWORK,SUI_RPC_URL, and Walrus URLs in the config. -
Collections and NFTs are managed from the admin dashboard. Images upload to Walrus, minting happens via the Sui wallet browser extension.
Sensitive directories are protected with layered security:
config/— Contains API keys and secrets. Blocked by its own.htaccessdeny rule + main.htaccessrewrite rule. On VPS setups, it's outside the web root entirely.cron/— Email sending scripts. Same dual protection.logs/— Log files. Same dual protection.db/— SQLite database. Blocked by.htaccessdeny rule..dbfiles also blocked by<Files>rule.
- PHP 7.4+
- SQLite3 (PDO)
- Apache with mod_rewrite
- cURL extension (for email API)
MIT