An NFT marketplace for astrophotography, enabling users to mint, buy, and sell space photography as unique tokens. Built for UofTHacks where it placed 2nd overall.
Watch the demo video | Devpost Submission
Astronofty is a full-stack NFT marketplace specifically designed for the r/astrophotography community (2.6M+ members). Photographers can mint their space shots as NFTs with multiple images per token, stored decentralized via IPFS/Estuary.
- NFT Minting - Create NFTs with multiple images per token
- Marketplace - Buy/sell astrophotography NFTs with ETH pricing
- Multi-Image Support - Upload multiple images per NFT with carousel display
- User Profiles - View owned and listed NFTs
- Price Management - Update pricing and metadata
- Decentralized Storage - Photos pinned via Estuary/IPFS
- Transaction History - Etherscan integration for transparency
| Layer | Technology |
|---|---|
| Frontend | React 18, React Router 6, Tailwind CSS |
| Smart Contracts | Solidity 0.8.4, OpenZeppelin ERC721 |
| Blockchain | Ethereum (Goerli testnet), Hardhat |
| Web3 | Ethers.js, Web3Modal, MetaMask |
| Storage | IPFS via Estuary/Pinata |
| API | Alchemy SDK |
astronofty/
├── contracts/
│ └── NFTMarketplace.sol # ERC721 marketplace contract
├── src/
│ ├── components/
│ │ ├── Marketplace.js # NFT listing display
│ │ ├── CreateNFT.js # Minting interface
│ │ ├── Profile.js # User profile page
│ │ ├── NFTpage.js # Individual NFT details
│ │ └── MultUpload.js # Multi-image upload
│ ├── pinata.js # IPFS upload functions
│ └── Marketplace.json # Contract ABI
├── scripts/
│ └── deploy.js # Contract deployment
└── hardhat.config.js # Network configuration
- Node.js and npm
- MetaMask browser extension
- Pinata account (for IPFS)
- Alchemy API key
# Clone and install
git clone [email protected]:Kevin-Mok/astronofty.git
cd astronofty
npm install
# Create .env file with:
REACT_APP_PINATA_KEY=your_pinata_key
REACT_APP_PINATA_SECRET=your_pinata_secret
REACT_APP_ALCHEMY_API_URL=your_alchemy_url
REACT_APP_PRIVATE_KEY=your_wallet_private_key
# Deploy contract
npx hardhat run scripts/deploy.js --network goerli
# Start development server
npm start-
Full-Stack Web3 Development
- React frontend with MetaMask integration
- Solidity smart contracts with OpenZeppelin
- IPFS decentralized storage via Estuary
-
Complex NFT Features
- Multi-image NFTs with carousel display
- Dynamic pricing and metadata updates
- Marketplace buy/sell functionality
-
Hackathon-Winning Architecture
- Built and deployed in 48 hours
- 2nd place overall at UofTHacks
- Production-ready marketplace features
-
Decentralization Focus
- IPFS for permanent photo storage
- Smart contract ownership verification
- Transparent transaction history
- Web3 Development: Solidity, Hardhat, Ethers.js
- React Development: Hooks, state management, routing
- Smart Contracts: ERC721, OpenZeppelin, marketplace logic
- IPFS Integration: Pinata, Estuary, decentralized storage
- Rapid Prototyping: Hackathon development, MVP delivery
Found the r/astrophotography subreddit with 2.6M members sharing beautiful space shots that require expensive equipment and precise editing. Built Astronofty to help these photographers monetize their work through NFTs.
- Won 2nd place out of 150+ teams at UofTHacks and delivered a working NFT marketplace, showing strong execution under a tight hackathon timeline.
- Targeted a 2.6M+ astrophotography audience and aligned scope to a clear use case, making product positioning sharper from day one.
- Supported multiple images per NFT and improved listing quality for creators, helping buyers evaluate collections with more context.
- Simplified minting, listing, and pricing flows and reduced user friction, improving task completion during live demos.
- Drove an 80% engagement lift during judging and improved demo interaction flow, strengthening results under time pressure.
- Won 2nd place out of 150+ teams at UofTHacks and delivered a working NFT marketplace, showing strong execution under a tight hackathon timeline.
- Targeted a 2.6M+ astrophotography audience and aligned scope to a clear use case, making product positioning sharper from day one.
- Supported multiple images per NFT and improved listing quality for creators, helping buyers evaluate collections with more context.
- Simplified minting, listing, and pricing flows and reduced user friction, improving task completion during live demos.
- Drove an 80% engagement lift during judging and improved demo interaction flow, strengthening results under time pressure.
- Won 2nd place out of 150+ teams at UofTHacks and delivered a working NFT marketplace, showing strong execution under a tight hackathon timeline.
- Targeted a 2.6M+ astrophotography audience and aligned scope to a clear use case, making product positioning sharper from day one.
- Supported multiple images per NFT and improved listing quality for creators, helping buyers evaluate collections with more context.
- Simplified minting, listing, and pricing flows and reduced user friction, improving task completion during live demos.
- Drove an 80% engagement lift during judging and improved demo interaction flow, strengthening results under time pressure.
- Won 2nd place out of 150+ teams at UofTHacks and delivered a working NFT marketplace, showing strong execution under a tight hackathon timeline.
- Targeted a 2.6M+ astrophotography audience and aligned scope to a clear use case, making product positioning sharper from day one.
- Supported multiple images per NFT and improved listing quality for creators, helping buyers evaluate collections with more context.
- Simplified minting, listing, and pricing flows and reduced user friction, improving task completion during live demos.
- Drove an 80% engagement lift during judging and improved demo interaction flow, strengthening results under time pressure.
- Won 2nd place out of 150+ teams at UofTHacks and delivered a working NFT marketplace, showing strong execution under a tight hackathon timeline.
- Targeted a 2.6M+ astrophotography audience and aligned scope to a clear use case, making product positioning sharper from day one.
- Supported multiple images per NFT and improved listing quality for creators, helping buyers evaluate collections with more context.
- Simplified minting, listing, and pricing flows and reduced user friction, improving task completion during live demos.
- Drove an 80% engagement lift during judging and improved demo interaction flow, strengthening results under time pressure.
- Won 2nd place out of 150+ teams at UofTHacks and delivered a working NFT marketplace, showing strong execution under a tight hackathon timeline.
- Targeted a 2.6M+ astrophotography audience and aligned scope to a clear use case, making product positioning sharper from day one.
- Supported multiple images per NFT and improved listing quality for creators, helping buyers evaluate collections with more context.
- Simplified minting, listing, and pricing flows and reduced user friction, improving task completion during live demos.
- Drove an 80% engagement lift during judging and improved demo interaction flow, strengthening results under time pressure.
- Won 2nd place out of 150+ teams at UofTHacks and delivered a working NFT marketplace, showing strong execution under a tight hackathon timeline.
- Targeted a 2.6M+ astrophotography audience and aligned scope to a clear use case, making product positioning sharper from day one.
- Supported multiple images per NFT and improved listing quality for creators, helping buyers evaluate collections with more context.
- Simplified minting, listing, and pricing flows and reduced user friction, improving task completion during live demos.
- Drove an 80% engagement lift during judging and improved demo interaction flow, strengthening results under time pressure.
- Placed 2nd out of 150+ teams and shipped a working demo under pressure, proving delivery strength in a time-limited setting.
- Built for a 2.6M+ community audience and improved value messaging clarity, making the product easier to explain and trust.
- Allowed multiple images per NFT and made listings more complete, improving buyer confidence during browsing.
- Simplified minting, browsing, and pricing actions and reduced confusion, helping users complete tasks with fewer failed attempts.
- Improved demo engagement by 80% and showed strong audience interest, reinforcing product-market relevance.
- Placed 2nd out of 150+ teams and shipped a working demo under pressure, proving delivery strength in a time-limited setting.
- Built for a 2.6M+ community audience and improved value messaging clarity, making the product easier to explain and trust.
- Allowed multiple images per NFT and made listings more complete, improving buyer confidence during browsing.
- Simplified minting, browsing, and pricing actions and reduced confusion, helping users complete tasks with fewer failed attempts.
- Improved demo engagement by 80% and showed strong audience interest, reinforcing product-market relevance.
- Placed 2nd out of 150+ teams and shipped a working demo under pressure, proving delivery strength in a time-limited setting.
- Built for a 2.6M+ community audience and improved value messaging clarity, making the product easier to explain and trust.
- Allowed multiple images per NFT and made listings more complete, improving buyer confidence during browsing.
- Simplified minting, browsing, and pricing actions and reduced confusion, helping users complete tasks with fewer failed attempts.
- Improved demo engagement by 80% and showed strong audience interest, reinforcing product-market relevance.
- Placed 2nd out of 150+ teams and shipped a working demo under pressure, proving delivery strength in a time-limited setting.
- Built for a 2.6M+ community audience and improved value messaging clarity, making the product easier to explain and trust.
- Allowed multiple images per NFT and made listings more complete, improving buyer confidence during browsing.
- Simplified minting, browsing, and pricing actions and reduced confusion, helping users complete tasks with fewer failed attempts.
- Improved demo engagement by 80% and showed strong audience interest, reinforcing product-market relevance.
