Search projects, hackathons, sponsors and tech

    ← All projects

    Memora

    Memora transforms personal memories into permanent, immersive Memory NFTs

    Demo

    About

    Memories fade and lose their emotional impact over time Digital content disappears from platforms and cloud services Traditional photos/videos lack the immersive depth of real experience No way to preserve the complete context of a moment What if you could step back into your memories with full context and experience them in 3D?

    How it's made

    ## 🏗️ How It's Built ### 🖥️ **Frontend Architecture (Next.js 14)** ``` app/ ├── layout.tsx # Root layout with providers ├── page.tsx # Landing page ├── upload/ # Memory upload interface ├── gallery/ # NFT collection browser └── memory/[id]/ # Individual memory viewer components/ ├── WalletConnect.tsx # MetaMask integration ├── UploadMemory.tsx # Video upload + metadata form ├── MemoryGallery.tsx # Collection display ├── Scene3DViewer.tsx # 3D scene renderer ├── LumaSplatsViewer.tsx # Gaussian splat viewer └── VoiceAI.tsx # Voice conversation interface ``` ### 🎨 **3D Rendering System** **LumaSplats Integration**: ```typescript // components/LumaSplatsViewer.tsx import { LumaSplatsThree } from '@lumaai/luma-web' const splat = new LumaSplatsThree({ source: scene.url, // IPFS URL to .splat file enableControls: isOwner, // Ownership-based controls particleRevealEnabled: true // Enhanced visual effects }) ``` **Ownership-Based Access**: - **NFT Owners**: Full HD quality, enhanced controls, downloadable content - **Non-owners**: Preview mode with limited quality and upgrade prompts ### 🔗 **Web3 Integration (MetaMask + ethers.js)** ```typescript // lib/wallet.ts import { ethers } from 'ethers' const connectWallet = async () => { const provider = new ethers.BrowserProvider(window.ethereum) const signer = await provider.getSigner() const address = await signer.getAddress() // NFT ownership verification const balance = await nftContract.balanceOf(address) } ``` **Features**: - MetaMask wallet connection - Multi-network support (Ethereum, Sepolia, Polygon) - Real-time balance and NFT collection display - Ownership verification for 3D scene access ### 🎤 **Voice AI System (Azure OpenAI)** ```typescript // components/VoiceAI.tsx const startRecording = async () => { const stream = await navigator.mediaDevices.getUserMedia({ audio: true }) const mediaRecorder = new MediaRecorder(stream) // Record audio, convert to WAV, send to Azure OpenAI } const sendToAI = async (audioBlob: Blob) => { const response = await fetch(azureEndpoint, { method: 'POST', headers: { 'api-key': apiKey }, body: createFormData(audioBlob, conversationHistory) }) // Returns audio response for natural conversations } ``` **Capabilities**: - **Audio-to-Audio** conversations using gpt-4o-mini-audio-preview - **Memory Context** understanding with ETH Global Prague specifics - **Conversation History** management for coherent dialogues - **WebM to WAV** conversion for API compatibility ### 📡 **Oracle Data Integration (Flare Network)** ```typescript // scripts/flare-data-fetch.js class FlareDataFetcher { async fetchAllData(location) { const [crypto, weather, market, time] = await Promise.all([ this.fetchCryptoPrices(['ETH/USD', 'BTC/USD', 'FLR/USD']), this.fetchWeatherData(location), this.fetchMarketData(), this.fetchTimeData() ]) return { crypto, weather, market, time } } } ``` **Data Sources**: - **Crypto Prices**: ETH, BTC, FLR via FTSOv2 with confidence scores - **Weather Data**: Temperature, humidity, pressure, wind conditions - **Market Metrics**: Market cap, dominance, fear & greed index - **Time Context**: Unix timestamps, timezones, blockchain state ### 🗄️ **Storage Architecture** ``` Memory Storage Pipeline: Video Upload → Metadata Collection → Oracle Data Fetch → IPFS Upload → NFT Minting IPFS Structure: └── memory-{id}/ ├── scene.splat # 3D Gaussian splat file ├── metadata.json # Enhanced with oracle data ├── thumbnail.jpg # Preview image └── original.mp4 # Source video ``` **Storage Providers**: - **IPFS**: Immediate content addressing - **Lighthouse**: Decentralized storage with SDKs - **Akave**: Hot storage layer for Filecoin - **Filecoin**: Long-term cold storage with on-chain deals ### 🔍 **NFT Verification (Blockscout APIs)** ```typescript // scripts/blockscout-nft-test.js class BlockscoutNFTTester { async fetchNFTs(account) { const url = `${apiBase}/v2/addresses/${account}/nft` const response = await fetch(url) return this.formatNFTData(await response.json()) } } ``` **Multi-Network Support**: - Ethereum, Sepolia, Polygon, Base, Arbitrum - Real-time NFT collection queries - Ownership verification for access controls - Rich metadata extraction and display