• Stars
    star
    218
  • Rank 181,805 (Top 4 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created 10 months ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Farcaster Frames in less than 100 lines, and ready to be deployed to Vercel.

OnchainKit logo vibes

A Frame in 100 lines (or less)

Farcaster Frames in less than 100 lines, and ready to be deployed to Vercel.

To test a deployed Frame, use: https://warpcast.com/~/developers/frames.

To test a localhost Frame, use: Framegear. A simple tool that allows you to run and test your frames locally:

  • without publishing
  • without casting
  • without spending warps

And let us know what you build by either mentioning @zizzamia on Warpcast or X.


Have fun! ⛵️


App Routing files


app/page.tsx

import { getFrameMetadata } from '@coinbase/onchainkit/frame';
import type { Metadata } from 'next';
import { NEXT_PUBLIC_URL } from './config';

const frameMetadata = getFrameMetadata({
  buttons: [
    {
      label: 'Story time!',
    },
    {
      action: 'link',
      label: 'Link to Google',
      target: 'https://www.google.com',
    },
    {
      label: 'Redirect to pictures',
      action: 'post_redirect',
    },
  ],
  image: {
    src: `${NEXT_PUBLIC_URL}/park-3.png`,
    aspectRatio: '1:1',
  },
  input: {
    text: 'Tell me a boat story',
  },
  postUrl: `${NEXT_PUBLIC_URL}/api/frame`,
});

export const metadata: Metadata = {
  title: 'zizzamia.xyz',
  description: 'LFG',
  openGraph: {
    title: 'zizzamia.xyz',
    description: 'LFG',
    images: [`${NEXT_PUBLIC_URL}/park-1.png`],
  },
  other: {
    ...frameMetadata,
  },
};

export default function Page() {
  return (
    <>
      <h1>zizzamia.xyz</h1>
    </>
  );
}

app/layout.tsx

export const viewport = {
  width: 'device-width',
  initialScale: 1.0,
};

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  );
}

app/config.ts

export const NEXT_PUBLIC_URL = 'https://zizzamia.xyz';

app/api/frame/route.ts

import { FrameRequest, getFrameMessage, getFrameHtmlResponse } from '@coinbase/onchainkit/frame';
import { NextRequest, NextResponse } from 'next/server';
import { NEXT_PUBLIC_URL } from '../../config';

async function getResponse(req: NextRequest): Promise<NextResponse> {
  let accountAddress: string | undefined = '';
  let text: string | undefined = '';

  const body: FrameRequest = await req.json();
  const { isValid, message } = await getFrameMessage(body, { neynarApiKey: 'NEYNAR_ONCHAIN_KIT' });

  if (isValid) {
    accountAddress = message.interactor.verified_accounts[0];
  }

  if (message?.input) {
    text = message.input;
  }

  if (message?.button === 3) {
    return NextResponse.redirect(
      'https://www.google.com/search?q=cute+dog+pictures&tbm=isch&source=lnms',
      { status: 302 },
    );
  }

  return new NextResponse(
    getFrameHtmlResponse({
      buttons: [
        {
          label: `🌲 ${text} 🌲`,
        },
      ],
      image: {
        src: `${NEXT_PUBLIC_URL}/park-1.png`,
      },
      postUrl: `${NEXT_PUBLIC_URL}/api/frame`,
    }),
  );
}

export async function POST(req: NextRequest): Promise<Response> {
  return getResponse(req);
}

export const dynamic = 'force-dynamic';

Resources


Community ☁️ 🌁 ☁️

Check out the following places for more OnchainKit-related content:

Authors

License

This project is licensed under the MIT License - see the LICENSE.md file for details

More Repositories

1

perfume.js

Web performance library for measuring all performance vitals metrics
TypeScript
3,106
star
2

ng-tasty

A tasty collection of reusable UI components for Angular, like grandma used to make. Like Table directive, WebSocket / Debounce / Throttle service, Range / Camelize / Slugify filters
JavaScript
434
star
3

an-onchain-app-in-100-components

An Onchain App in less than 100 components, and ready to be deployed to Vercel.
TypeScript
11
star
4

san-francisco-the-good-parts

San Francisco: The Good Parts! An opinionated travel guide ☕️ 🌴 ☀️
9
star
5

tasty-flask-app

Beginning Web Dev with Flask, Bootstrap and AngularJS.
Python
8
star
6

generator-benchpress

benchpress
JavaScript
7
star
7

generator-ngtasty

This generator is the scaffolding tool for generate by Yeoman your collection of reusable UI components for AngularJS.
JavaScript
6
star
8

taste-of-angularjs

A Taste of AngularJS: Javascript framework for superheroes
CSS
4
star
9

zizzamia.com

My personal web site in Node.js and CoffeeScript.
JavaScript
4
star
10

angularjs-essentials

AngularJS Essentials
CSS
3
star
11

generator-ng-flask

A tasty scaffold for AngularJS and Flask.
JavaScript
3
star
12

zizzamia.github.io

HTML
2
star
13

angular-mocks

Npm package for angular-mocks.js
2
star
14

bower-ng-tasty

Bower package for the stable branch of ngTasty
JavaScript
2
star
15

building-high-performance-measurable-directives

#ngTasty - Building high performance measurable directives
JavaScript
2
star
16

the-secret-life-cycle-of-components

The Secret Life(cycle) of Components. There is an entire world of complex interactions happening just under the surface of an Angular application.
HTML
2
star
17

rendering-in-angular-2

Angular 2.0 will provide support for custom renderers and platforms. With custom renderers we can have our component/application code render itself differently for a browser, a desktop-level application, a mobile phone or on a watch. We can also leverage native-level code or package our application into a webview.
JavaScript
2
star
18

ultra-simple-blogging

It's an ultra-simple blogging tool with create, edit and delete functionality for articles, using Django on Google App Engine.
Python
1
star
19

talk

JavaScript
1
star
20

angular-2-ngupgrade

Basic migration
JavaScript
1
star
21

angular-app-in-production-lightning-talk

Running an AngularJS App in Production Lightning talk
JavaScript
1
star