All notable changes to Bimex are documented here. Format follows Keep a Changelog.
- SSE real-time updates: indexer pushes
proyecto_actualizado,nueva_contribucion,yield_reclamadoevents to connected clients (#62) - Public changelog page accessible from the app footer (#81)
- Dark mode with toggle in navbar (#59)
- Project search with debounce (#60)
- Share project with QR code (#61)
- Transparency page with on-chain stats (#57)
- Rewards panel (
Recompensas.jsx) connected to real contract data (#56) - CETES live rate via Etherfuse displayed in landing stats bar (#55)
- i18n support (Spanish / English) with
react-i18next(#53) - Skeleton loading states across all data-fetching components (#48)
- Toast notification system replacing inline error messages (#50)
- Code splitting: bundle reduced ~40% (#47)
- Mobile-first responsive design across all views (#49)
- Admin panel with project approval / rejection flow (#46)
- TTL management in contract storage (#64)
- Security headers in Vercel deployment (#65)
EnRevisionstate: projects require admin approval before accepting fundsadmin_aprobar()andadmin_rechazar()contract functionsRechazadostate withmotivo_rechazofielddoc_hash(BytesN<32>): SHA-256 document hash stored on-chain for verifiabilitycalcular_yield_detallado(): returns yield broken down by CETES and AMMestado_capital(): returns current capital distributionsolicitar_continuar(): allows a new owner to resume an abandoned projectbimex-indexer: on-chain indexing service to extend persistent storage TTL and maintain event history
- CEI pattern (Checks-Effects-Interactions) applied in
contribuir(),retirar_principal(),reclamar_yield(), andabandonar_proyecto()— prevents reentrancy attacks require_auth()moved to the start of every function that requires it, before any storage reads or business logic- Contribution cap:
cantidad = cantidad.min(restante)prevents accidental or malicious overfunding - Top-up preserves the backer's original timestamp (additional contributions no longer reset the yield clock)
solicitar_continuar()resetstimestamp_inicioso the new owner does not inherit accumulated yield from the previous periodcalcular_yield_seguro()uses early division to avoid i128 overflow with large capitals- Bounds check in
inicializar():yield_cetes_bpsandyield_amm_bpscannot exceed 10,000,000 bps
- Yield rates updated to production values: CETES 9.45% APY (
yield_cetes_bps = 945), AMM 4.00% APY (yield_amm_bps = 400)
- Initial demo presented at Hack+ Alebrije (Stellar | CDMX)
- Core contract functions:
crear_proyecto,contribuir,retirar_principal,reclamar_yield - Basic React frontend with Freighter wallet integration
- Stellar Testnet deployment