Shipping GenDaily: meaningful daily on-chain actions for GenLayer

GenDaily — Daily Check-in dApp for GenLayer StudioNet

TL;DR: A daily check-in dApp on GenLayer StudioNet with streaks, stats, and a 7-day view.
Goal: give users meaningful daily on-chain actions (not just social).


Why (Inspiration & Vision)

GenLayer currently doesn’t expose a lot of public testnet interactions—most energy is social.
GenDaily exists to give everyone one small, meaningful thing to do on-chain every day: open the app, check in, build a streak, and learn the Accepted → Finalized model by doing.
My hunch: a small, steady heartbeat of daily activity can help the GenLayer community grow stronger.


Features

  • :white_check_mark: Daily check-in (UTC-based, prevents double check-ins)
  • :1234: Streak & total, plus a 7-day view (circles with neon :check_mark:)
  • :stopwatch: Countdown to the next UTC reset
  • :locked_with_key: Wallet UX: wagmi + RainbowKit, clean connect/disconnect
  • :last_quarter_moon: Dark/Light via CSS variables
  • :test_tube: Clear finality UX: wait for FINALIZED before updating stats

Stack & GenLayer

  • Frontend: Next.js (App Router, TS) + MUI + @tanstack/react-query
  • Wallet: wagmi + RainbowKit + MetaMask
  • GenLayer SDK: genlayer-js on StudioNet (chainId 61999)
  • Contract (genlayer-py): DailyCheckinPyUTC
  • Key methods:
    • Write: check_in()
    • View: get_my_stats(), is_checked_today(), current_day_index(), get_day_range_counts(start, end), next_reset_time()

Client init (StudioNet)

import { createClient } from "genlayer-js";
import { studionet } from "genlayer-js/chains";

const client = createClient({ chain: studionet, account: "0xYOUR_ADDRESS" });
await client.initializeConsensusSmartContract();
1 Like