📷 Photography · cinematic color grading

Retina LUT Engine

Access exclusive cinematic color grading LUTs calibrated specifically for Apple display color spaces.

Tokenized stock signal· real-world asset
Section · Onchain

The primitive.

full primer →

The app reads the user's Robinhood-Chain tokenized-stock balance (AAPL / TSLA / NVDA / USDG …) and unlocks or personalises the cinematic color grading surface for photographers who actually hold the underlying asset — no login form, just onchain proof.

Why this primitiveAAPL token balance gates access to proprietary color profiles optimized for Apple hardware ecosystems.

Kernel
an ERC-20 read against a Robinhood Chain tokenized stock (AAPL / AMD / TSLA / NVDA / GOOGL / MSFT / WETH / USDG) via viem's balanceOf, gating a creative feature on real onchain holdings
Drives the UI as
a 'stock-gated' badge that unlocks or personalizes the creative surface based on the user's tokenized-stock balance
Appendix · Secrets

Required keys.

METAMASK_PRIVATE_KEY
Exported from MetaMask. Fund on Robinhood Chain Testnet via the faucet.
open ↗
ROBINHOOD_TESTNET_RPC_URL
Alchemy Robinhood Chain Testnet HTTPS endpoint. Create a free app → copy the HTTPS URL.
open ↗
PRIVY_APP_ID
Enables Google sign-in and sponsored tx. Add Robinhood Chain Testnet as a custom EVM chain in the Privy dashboard.
open ↗
PINATA_JWT
Pins images / JSON / manifests to IPFS.
open ↗

Add these in your Lovable project under Settings → Secrets before pasting the prompt below. Blockscout verification needs no API key.

Appendix · Mega-prompt

The build prompt.

Paste into a fresh Lovable project. Make sure all five secrets above are set first. read the build strategy →

Build "Retina LUT Engine" in ONE Lovable message. Single-page demo.

CONCEPT
Access exclusive cinematic color grading LUTs calibrated specifically for Apple display color spaces.
Discipline: Photography (cinematic color grading).
Onchain primitive: Tokenized stock signal. Why this primitive: AAPL token balance gates access to proprietary color profiles optimized for Apple hardware ecosystems.

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 Robinhood Chain Testnet, verified on Blockscout.
- Privy is always the auth + sponsored-tx layer (Google login, embedded wallet).
- Pinata/IPFS only if the idea genuinely needs to store a file or metadata.
- At most ONE AI call per user action (use Lovable AI Gateway with LOVABLE_API_KEY if AI is part of the idea).
- Skip tests, skip CI, skip docs pages. Ship the demo, nothing else.

STACK
- React + Vite single page (the index route).
- Privy embedded wallet wraps `<App />` in src/main.tsx. Define the Robinhood Chain Testnet
  as a custom viem chain (viem/chains does not ship it yet):
    import { defineChain } from 'viem';
    export const robinhoodTestnet = defineChain({
      id: 46630,
      name: 'Robinhood Chain Testnet',
      nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
      rpcUrls: { default: { http: [import.meta.env.VITE_ROBINHOOD_TESTNET_RPC_URL || 'https://rpc.testnet.chain.robinhood.com'] } },
      blockExplorers: { default: { name: 'Blockscout', url: 'https://explorer.testnet.chain.robinhood.com' } },
      testnet: true,
    });
    <PrivyProvider appId={import.meta.env.VITE_PRIVY_APP_ID}
      config={{ loginMethods:['google'],
                embeddedWallets:{ ethereum: { createOnLogin:'users-without-wallets' } },
                defaultChain: robinhoodTestnet,
                supportedChains: [robinhoodTestnet] }}>
- All txs via Privy `useSendTransaction` with `{ sponsor: true }` (zero-gas for the user)
  and `{ chainId: 46630 }`.
- Hardhat in /contracts (kept outside the Vite bundle). Install
  `@nomicfoundation/hardhat-toolbox` AND `@nomicfoundation/hardhat-verify@latest`
  (>=3.x — required for Blockscout via customChains).
- hardhat.config.cjs — Blockscout has no API key, so pass a placeholder string:
    require("@nomicfoundation/hardhat-toolbox");
    require("@nomicfoundation/hardhat-verify");
    module.exports = {
      solidity: { version: "0.8.24", settings: { optimizer: { enabled: true, runs: 200 } } },
      networks: { robinhoodTestnet: {
        url: process.env.ROBINHOOD_TESTNET_RPC_URL || "https://rpc.testnet.chain.robinhood.com",
        accounts: [process.env.METAMASK_PRIVATE_KEY.startsWith("0x")
          ? process.env.METAMASK_PRIVATE_KEY : "0x" + process.env.METAMASK_PRIVATE_KEY],
        chainId: 46630,
      } },
      etherscan: {
        apiKey: { robinhoodTestnet: "blockscout-no-key-required" },
        customChains: [{
          network: "robinhoodTestnet",
          chainId: 46630,
          urls: { apiURL: "https://explorer.testnet.chain.robinhood.com/api", browserURL: "https://explorer.testnet.chain.robinhood.com" },
        }],
      },
      sourcify: { enabled: false },
    };
- Deploy: `npx hardhat run scripts/deploy.cjs --network robinhoodTestnet`.
- Verify (run RIGHT AFTER deploy, no constructor args for these contracts):
  `npx hardhat verify --network robinhoodTestnet <address>`
  On success Blockscout marks the contract as verified and the source becomes readable at
  `https://explorer.testnet.chain.robinhood.com/address/<address>#code`.
- Frontend reads: create a viem public client with the Alchemy URL too —
  `createPublicClient({ chain: robinhoodTestnet, transport: http(import.meta.env.VITE_ROBINHOOD_TESTNET_RPC_URL) })`.
  Expose ROBINHOOD_TESTNET_RPC_URL to the client by also setting VITE_ROBINHOOD_TESTNET_RPC_URL
  to the same value.
- Write the deployed address to `src/data/contract.json` so the UI links to
  `https://explorer.testnet.chain.robinhood.com/address/<address>`.

CONTRACT (contracts/RetinaLUTEngine.sol):
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
/// @title RetinaLUTEngineWETH
/// @notice Robinhood-Chain-Testnet mock of the WETH tokenized stock.
/// @notice Anyone can claim() 1 unit to demo the stock-gated feature.
/// @notice Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14
contract RetinaLUTEngineWETH is ERC20 {
    mapping(address => bool) public claimed;
    constructor() ERC20("Mock WETH", "WETH") {}
    /// @notice Built during the Creative AI & Quantum Hackathon organised by StreetKode Fam during Indian Krump Festival 14
    function claim() external {
        require(!claimed[msg.sender], "already claimed");
        claimed[msg.sender] = true;
        _mint(msg.sender, 1 ether);
    }
}
```

USER FLOW
1. Land on page -> 'Sign in with Google' (Privy) -> embedded wallet auto-provisioned on Robinhood Chain Testnet.
2. On sign-in, read the user's `balanceOf` for the deployed Mock WETH contract via viem. If balance == 0, show a 'Claim 1 WETH to unlock' button that calls `claim()` (Privy sponsored tx). If balance >= 1 WETH, unlock the cinematic color grading feature and render a 'Stock-gated · holds WETH (Wrapped Ether)' badge. Note in the UI copy that on mainnet this would read the canonical WETH contract at 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73.
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         Deployer key. Fund it with testnet ETH from https://faucet.testnet.chain.robinhood.com
- ROBINHOOD_TESTNET_RPC_URL    Alchemy Robinhood Chain Testnet HTTPS endpoint
                               (https://robinhood-testnet.g.alchemy.com/v2/<ALCHEMY_KEY>). Create a free app at
                               https://dashboard.alchemy.com/ (search 'Robinhood Chain' when
                               adding a network) -> copy the HTTPS URL. Public RPC
                               (https://rpc.testnet.chain.robinhood.com) works as a fallback but throttles under load.
- PRIVY_APP_ID                 Google sign-in + sponsored tx. Docs: https://docs.privy.io/llms-full.txt
                               In the Privy dashboard, add a Custom EVM chain: id=46630,
                               name='Robinhood Chain Testnet', rpc=$ROBINHOOD_TESTNET_RPC_URL,
                               explorer=https://explorer.testnet.chain.robinhood.com.
- PINATA_JWT                   IPFS uploads (only if the app pins media). Docs: https://docs.pinata.cloud/llms-full.txt

NOTE: NO ETHERSCAN_API_KEY. Robinhood Chain uses Blockscout, which verifies contracts without an API 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
Appendix · Market

Market sizing.

TAM
$2.4B
global photo software market
SAM
$800M
cinematic color grading tools
SOM
$120M
Apple-ecosystem color workflows

Indicative figures for hackathon pitches — refine with your own research before raising.

See also

Adjacent entries.