Cozycast: The Bounty

How to build Cozycast (and get paid for it)

New to Concept Testing? Read our announcement post.

Need a refresher on Cozycast? Check out the previous post.

We almost doubled our initial target on our crowdfund for Cozycast!

One step closer to bringing custom feeds to Farcaster.

Now, on to the fun part!

If you contributed to the crowdfund (or previously minted a Concept Testing post here on Paragraph), you can join the group chat for beta testing.

The process for building Cozycast

  1. We post a bounty with details on the process and development spec (what you're reading now)

  2. Any devs interested in building Cozycast can reply to the bounty to apply. You must link to your Github with a hosted, early version showing that you "understand the assignment" and are capable of delivering the spec (see below).

  3. Once approved, we'll mark the bounty as "in progress" and add the dev to the group chat with beta testers.

    "In progress" means someone is working on it, but anyone else can still post a GitHub early version to apply and deliver better / faster.

  4. Devs post updates of their Cozycast version in the group chat and receive feedback from testers.

  5. Once the version fully meets specifications and beta testers like the user experience, the bounty is marked complete and paid out.

"The Spec"

  1. A web & mobile app (Android + iOS)

  2. A default "Following" feed

    • All casts from people you follow, in the channels you follow

  3. The ability to create custom feeds with additional variables:

    • Casts restricted to users with FID above/below custom #

    • Casts restricted to users with a specific NFT in a connected wallet

    • Casts only in specific channels

      • This can be done either by muting (subtracting channels from initial following) or curating (adding channels from zero)

    • Casts from all people vs. people you follow

  4. The ability to open casts in Warpcast

    • Cozycast is "read-only" by design, so in order to cast or interact with frames, it will need to be part of an app with signers.


General guidelines for evaluation

  • Your code is expected to be typesafe using Typescript and have working builds for Web, iOS (expo go or Testflight) and Android published to the beta testers.

  • Functionally you need to fulfill the requirements laid out above, while the user interface will be judged and feedback for improvement provided by the beta tester group chat as they contributed to the bounty and make this all possible by putting in their money and time.

  • The actual code has to handle errors, be deployable to production straight away with documentation on how to deploy available.

  • If there is no network connection or other errors, notifications are shown. Loading animations are used when the network connection isn’t instant on interactions.

  • Feeds are infinitely scrollable so if you hit the end it loads more, when available.

  • Interactions are animated and the UI as clean as possible. Remove or use context menus instead of clutter.

    When in doubt: don’t overthink the delivery, ask beta testers for feedback and iterate.


How to build Cozycast

Further development notes from Samuel

Conceptual Overview

There is general technology needed to build any kind of Farcaster thing and also specifics for building the proposed MVP in terms of a read client.

All of them can be accomplished via Expo React Native in Typescript. Expo provides the rails to write Typescript code once and deploy to native iOS and Android as well as the Web for browser and a server to host potential API endpoints you may need.

In general all casts (content published to Farcaster and therefore also Warpcast) is present on so called Hubs. A Hub is a computer running software to receive and propagate Farcaster posts as well as hold information on user profiles (FIDs).

Anyone can spin up their own hub and read/write to the network.

For speed many people like to use the traditional database PostgreSQL and then synchronize with a hub.

The database is used for quick read/writes that are known to scale in traditional computing environments. To synchronize data from the PostgreSQL to the Hub and from the Hub to the PostgreSQL database there is a NodeJS based replicator available.

With that for reading you could leverage any regular database read mechanisms you already know.

Also for reading there are React Hooks already built by Dylan working with Neynars APIs so you don’t need to run your own replicator/hub and there are typescript - expo client implementations you can look at and potentially just adjust their feed.

Where for APIs there is also Neynar Developer APIs and an awesome hub to use from Pinata.

Currently as of April 2024 there is work being done to make the React Hooks compatible with straight requests to Hubs or the PostgreSQL replicator so you are free to choose managed solutions or run the infrastructure yourself, though the easiest solution to get setup right away is to use Neynar APIs.

Relevant Neynar APIs:

A step-by-step roadmap to build Cozycast

1 - Set your target on the clear default filter you apply and what potential options you want to explore with users (e.g. FID below 20.000 or only nouns token holders, …)

2 - Use farcasterkit.com React Hooks to get Latest casts for a reverse chronological feed and filter what the users needs in his feed by filtering for if user follows and filters don’t block

3 - In the basic user interface link out to Warpcast so if homefeed shows a cast one can act on that cast in Warpcast and view replies there too

4 - Step away from just one user used in testing and add authentication (sign in with Warpcast via Farcaster Auth Kit)

5 - Clean the user interface so the app is a joy to use

6 - Add reply viewing where with interaction user could see the full conversation with filters applied without having to go to Warpcast

7 - Add channel support so user can browse channels based on a list of all of them - here only the filter would apply and cast from people the user does not follow would be shown too.

8 - Add muting channels. If a channel is muted no casts from that channel will be shown no matter if it matches the filter or not.

9 - Add favorite channels where users can favorite (follow) a channel and pin that to their user interface or a sidebar

10 - Add a feed where one can select multiple channels and view a curated list of channels together. E.g. I select /spirituality and /philosophy so now I am viewing casts from both + the filter I applied

11 - Clean the user interface so the app is a joy to use

12 - Add Frame support (could use Expocaster to add them into your Expo App)

If you want to go further: 

13 - Add Signer management and write (react, respond, follow from feed) - Sign in with Neynar makes it easy

14 - Add user profiles page when clicking a users name

Loading...
highlight
Collect this post to permanently own it.
Mark Fishman logo
Subscribe to Mark Fishman and never miss a post.