Skip to content

Commit

Permalink
Added roadmap page, improved README and About page
Browse files Browse the repository at this point in the history
  • Loading branch information
luloxi committed Nov 21, 2024
1 parent 93d6225 commit e09fb46
Show file tree
Hide file tree
Showing 5 changed files with 302 additions and 55 deletions.
59 changes: 4 additions & 55 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,69 +1,18 @@
Social protocol where interactions are monetized 💰 allowing users to earn through engaging with their community 🫂.

❓ To know what this project aims to be, [see the about page](https://punksociety.xyz/about).
❓ To know what this project aims to be, [read the about page](https://punksociety.xyz/about).

📥 To see pending development tasks, [see this Trello](https://trello.com/b/HLBnvKSu/punksociety)

# 🤘 Roadmap

## 🐣 Phase 1 (MVP)

-**Create PunkPosts contract**
-**Create PunkProfile contract to register users info and socials**
-**PunkSociety contract:** Social interactions
-**Post creation tool**
-**User profile page**
-**Search**: By address or username
- ✅ Enable options for sharing on other platforms
- Enable following users, liking, commenting and sharing posts
- **Incentive model**: Likes and comments send $ to the user on the other end
- Posting is paid and interactions sends a fee to owner
- **Individual post viewer**
- **Multi-language support**: Switch between languages

## 📈 Phase 2 (Business model)

- ⏸️ **Avalanche L1 with USDC as native gas:** Use an Avalanche L1 with USDC as native gas (Reference: [Create an Avalanche L1](https://docs.avax.network/tooling/create-deploy-avalanche-l1s/create-avalanche-l1))
- ⚠️ **USDC Staking/Lending model**: Bridged USDC can be lent or staked on AAVE and/or Compound (or similar) so users can earn interest on their USDC while using the platform
- **Fees**: PunkSociety collects fees from USDC lending revenue
- **Easy onramp tool**: Easy USDC buying tool for onboarding new users. (Reference:[FundButton from Coinbase](https://onchainkit.xyz/fund/fund-button) | [OnchainKit extension for Scaffold-ETH 2](https://github.com/scaffold-eth/create-eth-extensions/tree/onchainkit))
- **Built-in bridge manager**: Built-in simple tool for bridging USDC and NFTs to and from Avalanche, Base, Ethereum, and other EVM chains (Reference: [avalanche-interchain-token-transfer](https://github.com/ava-labs/avalanche-interchain-token-transfer) | [Chainlink CCIP Cross Chain Tokens](https://docs.chain.link/ccip/tutorials/cross-chain-tokens))
- **Dashboard Insights**: Track and analyze your revenue

## 🌐 Phase 3 (Indexing)

- **Integrate The Graph to index activity** and save RPC calls (Reference: [Bootstrap a Full Stack Modern dapp using the Scaffold-ETH CLI and Subgraph Extension](https://siddhantk08.hashnode.dev/bootstrap-a-full-stack-modern-dapp-using-the-scaffold-eth-cli-and-subgraph-extension) | [The Graph tool for creating a subgraph](https://thegraph.com/docs/en/developing/creating-a-subgraph/))
- **Notification system**
- Search by post content

## 💬 Phase 4 (Social enhancement)

- **Direct messages:** Allow users to send private messages to each other (Reference [Push Protocol](https://push.org/))
- Enable audio, video and links with preview type of posts
- **Polls**: Allow users to create polls
- **Customization**: Allow users to customize their profile appearance
- **Collections**: Create and share collections of posts
- **Groups**: Allow users to create and join groups with custom chat and newfeed
- **Categories**: Allow users to categorize their posts, filter by category and search by category

## 👨‍🦽 Phase 5 (Ease of use)

- **Educational Content**: Include onboarding tutorials and step-by-step guides to help users understand what they can do on the platform
- **Web 2.5 social login with account abstraction:** Sign up and log in with Google, Twitter, Instagram, etc. (Reference: [wagmi-thirdweb Connect Button](https://github.com/thirdweb-example/wagmi-thirdweb?ref=blog.thirdweb.com))
- **Accesibility support**: For the hearing and visually impaired, the app should be ARIA compliant to support screen readers and other assistive technologies (Reference: [ARIA](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA))
- **Add special metadata to NFTs** for screen readers and SEO
📥 Pending development tasks [on this Trello board](https://trello.com/b/HLBnvKSu/punksociety)

# 🤘 Development

📥 To see pending development tasks, [see this Trello](https://trello.com/b/HLBnvKSu/punksociety)

## 🛠️ Technical details

⚙️ Currently built using [Scaffold-ETH 2](https://scaffoldeth.io/), [Foundry](https://book.getfoundry.sh/), [OnchainKit](https://onchainkit.xyz/), [Pinata](https://pinata.cloud/), [Vercel](https://vercel.com/), [NextJS](https://nextjs.org/), [RainbowKit](https://rainbowkit.com/), [Wagmi](https://wagmi.sh/), [Viem](https://viem.sh/), and [Typescript](https://www.typescriptlang.org/).

🏦 Considering using protocols: [Circle USDC](https://www.circle.com/) as native gas, [The Graph](https://thegraph.com/) for indexing events, [Uniswap](https://app.uniswap.org/) and similar with an aggregator for token swaps, [AAVE](https://aave.com/), [Compound](https://compound.finance/) and similar options for generating interest on bridged [ERC20](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/), [Chainlink](https://chain.link/) for price oracles, [Push Protocol](https://push.org/) for notifications and messages, [Thirdweb](https://thirdweb.com/) for social login with account abstraction.
🏦 Considering using protocols: [Circle USDC](https://www.circle.com/) as native gas, [The Graph](https://thegraph.com/) for indexing events, [AAVE](https://aave.com/) for earning interest on USDC, [Chainlink](https://chain.link/) for cross-chain NFT bridging.

📜 Considering using contracts: [Ownable](https://docs.openzeppelin.com/contracts/2.x/access-control) and [Upgradeable](https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable) from [OpenZeppelin](https://www.openzeppelin.com/) or [Solady](https://github.com/Vectorized/solady) for contract ownership. [EIP712 Signatures](https://eips.ethereum.org/EIPS/eip-712).
📜 Considering using contracts: ERC721, [Ownable](https://docs.openzeppelin.com/contracts/2.x/access-control) and [Upgradeable](https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable) from [Solady](https://github.com/Vectorized/solady) for contract ownership. And maybe [EIP712 Signatures](https://eips.ethereum.org/EIPS/eip-712) for some gasless activity.

🔗 To be deployed on [Avalanche L1](https://github.com/ava-labs/avalanche-starter-kit) and Bridge [ERC20](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/) and [ERC721](https://ethereum.org/en/developers/docs/standards/tokens/erc-721/) using [Avalanche Interchain Token Transfer](https://github.com/ava-labs/avalanche-interchain-token-transfer) and [Chainlink CCIP Transfer Tokens](https://docs.chain.link/ccip/tutorials/cross-chain-tokens) with [EVM compatible chains](https://ethereum.org/en/developers/docs/scaling/sidechains/#evm-compatibility).

Expand Down
9 changes: 9 additions & 0 deletions packages/nextjs/app/about/About.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,15 @@ export const About = () => {
</div>
</div>

<div className="flex flex-col p-6 justify-center items-center bg-yellow-500 text-black">
<h1 className="text-4xl font-mono text-center">Wanna know how we&apos;re doing?</h1>
<div>
<Link href="/roadmap">
<button className="btn btn-primary bg-black hover:bg-gray-800">See our Roadmap</button>
</Link>
</div>
</div>

<div className="w-full pt-6 bg-base-100">
<h1 className="text-4xl font-mono text-center">Meet us! 🤘</h1>
</div>
Expand Down
265 changes: 265 additions & 0 deletions packages/nextjs/app/roadmap/Roadmap.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,265 @@
"use client";

import Link from "next/link";
import { NFTMetaData } from "~~/utils/simpleNFT/nftsMetadata";

export interface Post extends Partial<NFTMetaData> {
postId?: number;
uri: string;
user: string;
date?: string;
}

export const Roadmap = () => {
return (
<div className="flex flex-col items-center justify-center">
<div className="hero bg-base-200 ">
<div className="hero-content flex-col lg:flex-row-reverse lg:px-14">
{/* INSERT HERE A GIF SHOWING HOW A LIKE BECOMES MONEY */}
{/* <Image
src="/like-dollar.png"
alt="Animation clicking a like button and increasing USDC balance"
className="max-w-sm rounded-lg"
width={150}
height={150}
/> */}
<div className="flex flex-col justify-center">
<h1
className="text-4xl font-bold text-center
font-mono "
>
<strong>PunkSociety roadmap!</strong>🤘
</h1>

<span className="text-2xl text-center pt-2">
What we&apos;ve done and what will <strong className="text-green-600">we do next!</strong> 🎯
</span>
</div>
</div>
</div>

<div className="flex flex-col p-6 justify-center items-center bg-yellow-500 text-black">
<h1 className="text-4xl font-mono text-center">What is this about?</h1>
<div>
<Link href="/about">
<button className="btn btn-primary bg-black hover:bg-gray-800">Read our description</button>
</Link>
</div>
</div>

<div className="hero bg-base-300 flex flex-wrap justify-around gap-3 py-4 lg:p-4">
<section className="flex flex-col justify-center items-center gap-3" aria-labelledby="roadmap">
<h2 className="text-4xl " id="roadmap">
🤘 Roadmap
</h2>

<section className="w-full md:w-1/2 p-4 rounded-lg bg-base-200" aria-labelledby="phase1">
<h3 className="text-center text-2xl" id="phase1">
🐣 Phase 1 (MVP)
</h3>
<ul className="list-disc list-inside">
<li>
<span aria-label="completed task"></span> <strong>Create PunkPosts contract</strong>
</li>
<li>
<span aria-label="completed task"></span>{" "}
<strong>Create PunkProfile contract to register users info and socials</strong>
</li>
<li>
<span aria-label="completed task"></span> <strong>PunkSociety contract:</strong> Social interactions
</li>
<li>
<span aria-label="completed task"></span> <strong>Post creation tool</strong>
</li>
<li>
<span aria-label="completed task"></span> <strong>User profile page</strong>
</li>
<li>
<span aria-label="completed task"></span> <strong>Search:</strong> By address or username
</li>
<li>
<span aria-label="option enabled"></span> Enable options for sharing on other platforms
</li>
<li>
<span aria-label="option enabled"></span> Enable following users, liking, commenting and sharing posts
</li>
<li>
<strong>Incentive model:</strong> Likes and comments send $ to the user on the other end
</li>
<li>Posting is paid and interactions send a fee to the owner</li>
<li>
<strong>Individual post viewer</strong>
</li>
<li>
<strong>Multi-language support:</strong> Switch between languages
</li>
</ul>
</section>

<section className="w-full md:w-1/2 p-4 rounded-lg bg-base-200" aria-labelledby="phase2">
<h3 id="phase2" className="text-center text-2xl">
📈 Phase 2 (Business model)
</h3>
<ul className="list-disc list-inside">
<li>
⏸️ <strong>Avalanche L1 with USDC as native gas:</strong> Use an Avalanche L1 with USDC as native gas
<Link
href="https://docs.avax.network/tooling/create-deploy-avalanche-l1s/create-avalanche-l1"
className="text-blue-500 font-bold underline"
aria-label="Create an Avalanche L1"
>
Create an Avalanche L1
</Link>
</li>
<li>
⚠️ <strong>USDC Staking/Lending model:</strong> Bridged USDC can be lent or staked on AAVE and/or
Compound (or similar) so users can earn interest on their USDC while using the platform
</li>
<li>
<strong>Fees:</strong> PunkSociety collects fees from USDC lending revenue
</li>
<li>
<strong>Easy onramp tool:</strong> Easy USDC buying tool for onboarding new users.
<Link
href="https://onchainkit.xyz/fund/fund-button"
className="text-blue-500 font-bold underline"
aria-label="FundButton from Coinbase"
>
FundButton from Coinbase
</Link>{" "}
|
<Link
href="https://github.com/scaffold-eth/create-eth-extensions/tree/onchainkit"
className="text-blue-500 font-bold underline"
aria-label="OnchainKit extension for Scaffold-ETH 2"
>
OnchainKit extension for Scaffold-ETH 2
</Link>
</li>
<li>
<strong>Built-in bridge manager:</strong> Built-in simple tool for bridging USDC and NFTs to and from
Avalanche, Base, Ethereum, and other EVM chains
<Link
href="https://github.com/ava-labs/avalanche-interchain-token-transfer"
className="text-blue-500 font-bold underline"
aria-label="avalanche-interchain-token-transfer"
>
avalanche-interchain-token-transfer
</Link>{" "}
|
<Link
href="https://docs.chain.link/ccip/tutorials/cross-chain-tokens"
className="text-blue-500 font-bold underline"
aria-label="Chainlink CCIP Cross Chain Tokens"
>
Chainlink CCIP Cross Chain Tokens
</Link>
</li>
<li>
<strong>Dashboard Insights:</strong> Track and analyze your revenue
</li>
</ul>
</section>

<section className="w-full md:w-1/2 p-4 rounded-lg bg-base-200" aria-labelledby="phase3">
<h3 className="text-center text-2xl" id="phase3">
🌐 Phase 3 (Indexing)
</h3>
<ul className="list-disc list-inside">
<li>
<strong>Integrate The Graph to index activity</strong> and save RPC calls
<Link
href="https://siddhantk08.hashnode.dev/bootstrap-a-full-stack-modern-dapp-using-the-scaffold-eth-cli-and-subgraph-extension"
className="text-blue-500 font-bold underline"
aria-label="Bootstrap a Full Stack Modern dapp using the Scaffold-ETH CLI and Subgraph Extension"
>
Bootstrap a Full Stack Modern dapp using the Scaffold-ETH CLI and Subgraph Extension
</Link>{" "}
|
<Link
href="https://thegraph.com/docs/en/developing/creating-a-subgraph/"
className="text-blue-500 font-bold underline"
aria-label="The Graph tool for creating a subgraph"
>
The Graph tool for creating a subgraph
</Link>
</li>
<li>
<strong>Notification system</strong>
</li>
<li>Search by post content</li>
</ul>
</section>

<section className="w-full md:w-1/2 p-4 rounded-lg bg-base-200" aria-labelledby="phase4">
<h3 className="text-center text-2xl" id="phase4">
💬 Phase 4 (Social enhancement)
</h3>
<ul className="list-disc list-inside">
<li>
<strong>Direct messages:</strong> Allow users to send private messages to each other
<Link href="https://push.org/" className="text-blue-500 font-bold underline" aria-label="Push Protocol">
Push Protocol
</Link>
</li>
<li>Enable audio, video, and links with preview type of posts</li>
<li>
<strong>Polls:</strong> Allow users to create polls
</li>
<li>
<strong>Customization:</strong> Allow users to customize their profile appearance
</li>
<li>
<strong>Collections:</strong> Create and share collections of posts
</li>
<li>
<strong>Groups:</strong> Allow users to create and join groups with custom chat and newsfeed
</li>
<li>
<strong>Categories:</strong> Allow users to categorize their posts, filter by category and search by
category
</li>
</ul>
</section>

<section className="w-full md:w-1/2 p-4 rounded-lg bg-base-200" aria-labelledby="phase5">
<h3 className="text-center text-2xl" id="phase5">
👨‍🦽 Phase 5 (Ease of use)
</h3>
<ul className="list-disc list-inside">
<li>
<strong>Educational Content:</strong> Include onboarding tutorials and step-by-step guides to help users
understand what they can do on the platform
</li>
<li>
<strong>Web 2.5 social login with account abstraction:</strong> Sign up and log in with Google, Twitter,
Instagram, etc.
<Link
href="https://github.com/thirdweb-example/wagmi-thirdweb?ref=blog.thirdweb.com"
className="text-blue-500 font-bold underline"
aria-label="wagmi-thirdweb Connect Button"
>
wagmi-thirdweb Connect Button
</Link>
</li>
<li>
<strong>Accessibility support:</strong> For the hearing and visually impaired, the app should be ARIA
compliant to support screen readers and other assistive technologies
<Link
href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA"
className="text-blue-500 font-bold underline"
aria-label="ARIA"
>
ARIA
</Link>
</li>
<li>
<strong>Add special metadata to NFTs:</strong> for screen readers and SEO
</li>
</ul>
</section>
</section>
</div>
</div>
);
};
18 changes: 18 additions & 0 deletions packages/nextjs/app/roadmap/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Roadmap } from "./Roadmap";
import type { NextPage } from "next";
import { getMetadata } from "~~/utils/scaffold-eth/getMetadata";

export const metadata = getMetadata({
title: "Roadmap",
description: "Built with 🏗 Scaffold-ETH 2",
});

const RoadmapPage: NextPage = () => {
return (
<>
<Roadmap />
</>
);
};

export default RoadmapPage;
6 changes: 6 additions & 0 deletions packages/nextjs/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,12 @@ export const Footer = () => {
</Link>
</div>
<span>·</span>
<div className="text-center">
<Link className="link" href="/roadmap" passHref>
Roadmap
</Link>
</div>
<span>·</span>
<div className="text-center">
<a href="https://github.com/luloxi/PunkSociety/" target="_blank" rel="noreferrer" className="link">
Code
Expand Down

0 comments on commit e09fb46

Please sign in to comment.