LightCue Automation
Record and trigger lighting cues onchain to verify show timing and enable automated playback.
The primitive.
Lighting cue logs gets a tiny Solidity contract deployed to 0G Galileo testnet; directors see a 'verified onchain' badge with the live contract address and a one-tap 0G Chainscan link.
Why this primitiveSepolia contracts guarantee immutable cue sequences and decentralize control of lighting shows.
Required keys.
Add these three in your Lovable project under Settings → Secrets before pasting the prompt below. 0G's public RPC (https://evmrpc-testnet.0g.ai) is hardcoded — no RPC key needed.
The build prompt.
Paste into a fresh Lovable project. Make sure all five secrets above are set first. read the build strategy →
Build "LightCue Automation" in ONE Lovable message. Single-page demo.
CONCEPT
Record and trigger lighting cues onchain to verify show timing and enable automated playback.
Discipline: Theater & Live Performance (lighting cue logs).
Onchain primitive: Sepolia smart contract. Why this primitive: Sepolia contracts guarantee immutable cue sequences and decentralize control of lighting shows.
5-CREDIT BUDGET (HARD LIMIT):
- ONE single-page app. No router, no Lovable Cloud, no database, no auth flows beyond Privy drop-in.
- ONE Solidity contract, <=80 lines, deployed to 0G Galileo testnet, source uploaded to Chainscan-Galileo.
- Privy is always the auth + embedded-wallet layer (Google login, chainId 16602). Privy does NOT sponsor gas on 0G — the user signs every tx and pays in OG (top up from https://faucet.0g.ai, 0.1 OG/day).
- 0G Storage SDK (`@0glabs/0g-ts-sdk`) only if the idea genuinely needs to store a file.
- At most ONE AI call per user action via Lovable AI Gateway (LOVABLE_API_KEY, auto-provisioned) from a server route / server function. Default model: google/gemini-3-flash-preview.
- Skip tests, skip CI, skip docs pages. Ship the demo, nothing else.
0G GALILEO TESTNET (hardcode — no RPC secret needed):
chainId: 16602 (0x40DA)
name: "0G Galileo Testnet"
nativeCurrency: { name: "0G", symbol: "OG", decimals: 18 }
rpcUrl: "https://evmrpc-testnet.0g.ai"
explorer: "https://chainscan-galileo.0g.ai"
storageExplorer: "https://storagescan-galileo.0g.ai"
storageIndexer: "https://indexer-storage-testnet-turbo.0g.ai"
STACK
- React + Vite single page (the index route).
- Privy embedded wallet wraps `<App />` in src/main.tsx:
<PrivyProvider appId={import.meta.env.VITE_PRIVY_APP_ID}
config={{ loginMethods:['google'], embeddedWallets:{createOnLogin:'users-without-wallets'},
defaultChain:{ id: 16602, name:'0G Galileo Testnet',
nativeCurrency:{ name:'0G', symbol:'OG', decimals:18 },
rpcUrls:{ default:{ http:['https://evmrpc-testnet.0g.ai'] } },
blockExplorers:{ default:{ name:'Chainscan', url:'https://chainscan-galileo.0g.ai' } } } }}>
- All txs via Privy `useSendTransaction` with `chainId: 16602`. Privy does NOT sponsor gas on 0G — the user signs and pays in OG from their embedded wallet. Surface a "Top up at https://faucet.0g.ai" hint when balance is 0.
- Hardhat in /contracts (kept outside the Vite bundle). Install `@nomicfoundation/hardhat-toolbox`.
- hardhat.config.cjs (no Etherscan plugin — 0G uses Chainscan's web UI for verification):
require("@nomicfoundation/hardhat-toolbox");
module.exports = {
solidity: { version: "0.8.28", settings: { optimizer: { enabled: false }, evmVersion: "paris" } },
networks: { galileo: {
url: "https://evmrpc-testnet.0g.ai",
accounts: [process.env.METAMASK_PRIVATE_KEY.startsWith("0x")
? process.env.METAMASK_PRIVATE_KEY : "0x" + process.env.METAMASK_PRIVATE_KEY],
chainId: 16602,
} },
};
- Deploy: `npx hardhat run scripts/deploy.cjs --network galileo`.
- VERIFY on 0G Chainscan (manual, web UI — there is no Etherscan-compatible API):
1. Open `https://chainscan-galileo.0g.ai/address/<deployedAddress>` and click "Contract" -> "Verify and Publish".
2. Compiler: solc 0.8.28, optimization OFF, evmVersion: paris. These exact settings are required for Chainscan-Galileo to match bytecode — do not deviate.
3. Paste the flattened source (`npx hardhat flatten contracts/X.sol > flat.sol`, strip duplicate SPDX/pragma lines).
4. Submit. On success the source becomes readable at `https://chainscan-galileo.0g.ai/address/<address>#code`.
If verification fails with a bytecode mismatch, the cause is almost always optimizer ON or a different evmVersion — redeploy with the settings above rather than fighting the verifier.
- Frontend reads use viem with the hardcoded 0G RPC:
import { defineChain, createPublicClient, http } from 'viem';
export const galileo = defineChain({
id: 16602, name: '0G Galileo Testnet',
nativeCurrency: { name: '0G', symbol: 'OG', decimals: 18 },
rpcUrls: { default: { http: ['https://evmrpc-testnet.0g.ai'] } },
blockExplorers: { default: { name: 'Chainscan', url: 'https://chainscan-galileo.0g.ai' } },
});
const client = createPublicClient({ chain: galileo, transport: http() });
- Write the deployed address to `src/data/contract.json` so the UI links to
`https://chainscan-galileo.0g.ai/address/<address>`.
CONTRACT (contracts/LightCueAutomation.sol):
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
/// @title LightCueAutomation
/// @notice Record and trigger lighting cues onchain to verify show timing and enable automated playback.
/// @notice Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14
contract LightCueAutomation {
event Logged(address indexed author, string cid, uint256 at);
/// @notice Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14
function log(string calldata cid) external {
emit Logged(msg.sender, cid, block.timestamp);
}
}
```
USER FLOW
1. Land on page -> 'Sign in with Google' (Privy) -> embedded wallet auto-provisioned on 0G Galileo (chainId 16602).
2. User performs a lighting cue logs action; the app calls `log(payload)` on the contract via the Privy embedded wallet (`useSendTransaction`, `chainId: 16602`; user signs, pays gas in OG) and shows the Chainscan-Galileo link as proof.
3. Footer renders: "Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14"
REQUIRED SECRETS (Lovable -> Project Settings -> Secrets):
- METAMASK_PRIVATE_KEY 0G Galileo deployer key. Fund it: https://faucet.0g.ai (0.1 OG/day) or https://hub.0g.ai/faucet?network=testnet
- PRIVY_APP_ID Google sign-in + embedded wallet on 0G Galileo (user signs their own tx). Docs: https://docs.privy.io/llms-full.txt
AI calls (if the idea uses AI) go through Lovable AI Gateway via the auto-provisioned LOVABLE_API_KEY — no secret to add.
Base URL: https://ai.gateway.lovable.dev/v1 Header: Lovable-API-Key: $LOVABLE_API_KEY
Default model: google/gemini-3-flash-preview. Call from a server route / server function only; never expose the key client-side.
No SEPOLIA_RPC_URL, no ETHERSCAN_API_KEY, no PINATA_JWT, no AISA_API_KEY. 0G's public RPC is hardcoded
(https://evmrpc-testnet.0g.ai), verification happens on Chainscan-Galileo's web UI,
and blobs go through the 0G Storage SDK signed by the deployer key.
CREDIT (must appear in UI footer AND as NatSpec on every deployed contract):
Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14
Market sizing.
Indicative figures for hackathon pitches — refine with your own research before raising.