Privacy-first encrypted journal on Base blockchain
Journy is a decentralized journaling application that combines client-side encryption, IPFS storage, and blockchain verification to create a truly private and permanent record of your thoughts.
- 🔐 End-to-End Encryption: All content encrypted client-side using AES-GCM
- 📝 On-Chain Verification: Entry hashes stored on Base (Sepolia testnet)
- 🌐 Decentralized Storage: Encrypted content stored on IPFS via Pinata
- 🔥 Streak Tracking: Build your writing habit with on-chain streak validation
- 🎨 Minimal Design: Brutalist UI with JetBrains Mono and purple accents
journy/
├── packages/
│ ├── contract/ # Smart contracts (Hardhat)
│ └── web/ # Frontend (React + Vite)
└── docs/ # Documentation
Smart Contracts:
- Solidity ^0.8.20
- Hardhat
- OpenZeppelin contracts
- Base Sepolia network
Frontend:
- React + TypeScript
- Vite
- Wagmi + Viem
- Reown AppKit (Web3Modal)
- Tailwind CSS
- Framer Motion
Storage & Encryption:
- IPFS (Pinata)
- Web Crypto API (AES-GCM)
- Node.js 20.x
- npm or pnpm
- Clone the repository:
git clone https://github.com/GsusFC/journyapp.git
cd journyapp- Install contract dependencies:
cd packages/contract
npm install- Install web dependencies:
cd packages/web
npm install- Copy
.env.exampleto.envinpackages/contract/ - Add your private key and RPC URL
- Copy
.env.exampleto.envinpackages/web/ - Add your Pinata JWT token
- The contract address is already configured for Base Sepolia
Smart Contracts:
cd packages/contract
npm run compile # Compile contracts
npm run test # Run tests
npm run deploy # Deploy to testnetFrontend:
cd packages/web
npm run dev # Start dev serverDeployed on Base Sepolia:
- Address:
0xf5FeFabd1B0Ad49a0DE92B7c04FBa3518083Dc64 - View on BaseScan
logEntry(string cid): Log an encrypted entry's IPFS CIDcurrentStreak(address): Get user's current writing streakisEligibleForClanker(address): Check if user has 30+ day streak
- Client-Side Encryption: All journal content is encrypted in your browser before leaving your device
- No Plain Text Storage: We NEVER store or transmit unencrypted content
- You Own Your Keys: Encryption keys derived from your wallet signature
- Decentralized Storage: Content stored on IPFS, not centralized servers
- On-Chain Hashes Only: Blockchain only stores IPFS CIDs, not content
See ANTIGRAVITY_RESTRICTIONS.md for detailed security guidelines.
- Typography: JetBrains Mono (monospace)
- Colors:
- Background:
#f7f9fc - Text:
#0f131e - Accent:
#6716e9(purple) - Surface:
#e9e3ff
- Background:
- Aesthetic: Minimal brutalist with sharp edges (no border radius)
MIT
Contributions welcome! Please read our contributing guidelines first.
Built with ❤️ using Base, IPFS, and Web3