{"id":13455497,"url":"https://github.com/solana-nft-programs/staking-ui","last_synced_at":"2026-05-03T00:01:33.874Z","repository":{"id":37080651,"uuid":"479127826","full_name":"solana-nft-programs/staking-ui","owner":"solana-nft-programs","description":"The UI for staking NFTs on Solana.Staking UI can be treated as an admin interface for stake pools as well as a barebones end-user staking UI","archived":false,"fork":false,"pushed_at":"2023-09-19T02:23:19.000Z","size":118736,"stargazers_count":76,"open_issues_count":7,"forks_count":148,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-10T11:58:56.541Z","etag":null,"topics":["nextjs","react","ui","ui-components"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solana-nft-programs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-04-07T19:49:03.000Z","updated_at":"2025-09-04T10:54:01.000Z","dependencies_parsed_at":"2023-09-19T06:55:45.457Z","dependency_job_id":null,"html_url":"https://github.com/solana-nft-programs/staking-ui","commit_stats":null,"previous_names":["cardinal-labs/staking-ui","cardinal-labs/cardinal-staking-ui"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/solana-nft-programs/staking-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solana-nft-programs%2Fstaking-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solana-nft-programs%2Fstaking-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solana-nft-programs%2Fstaking-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solana-nft-programs%2Fstaking-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solana-nft-programs","download_url":"https://codeload.github.com/solana-nft-programs/staking-ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solana-nft-programs%2Fstaking-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32553690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T22:28:24.418Z","status":"ssl_error","status_checked_at":"2026-05-02T22:28:14.225Z","response_time":132,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nextjs","react","ui","ui-components"],"created_at":"2024-07-31T08:01:06.279Z","updated_at":"2026-05-03T00:01:33.834Z","avatar_url":"https://github.com/solana-nft-programs.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"e#  Staking UI\n\nThis repository hosts the UI inteface that powers **https://stake.host.so** for staking NFTs on Solana.\n\nUse this repo to create and deploy stake pools with built-in reward distribution, or build your own custom interface with our underlying staking protocol.\n\nFor questions or technical help, join our **[Discord](https://discord.gg/stX2FAYbVq)**.\n\n---\n\n\u003cdiv style=\"text-align: center; width: 100%;\"\u003e\n  \u003cimg style=\"height: 450px\" src=\"./images/staking.png\" /\u003e\n\u003c/div\u003e\n\n## Create a Stake Pool\n\nTo create a stake pool, navigate to the admin page located at https://stake.host.so/admin. This page hosts a form to create a stake pool with various configurations.\n\n**Note:** All configurations in the admin page are optional. Also, filters in the stake pool configuration are **union-based**, if any one of the conditions is met, then the NFT will be allowed to stake in the pool.\n\nAfter creating your stake pool, you will receive a **`Stake Pool Id`**. View your stake pool at https://stake.host.so/[stakePoolId]\n\nPools by default will have no metadata. View the section titled \"Customizing your Stake Pool\" to learn about adding images, colors and custom pool name.\n\n**Pool Creation Parameters:**\n\n```typescript\nexport type StakePoolParams {\n    allowedCollections?: PublicKey[];\n    allowedCreators?: PublicKey[];\n    requiresAuthorization?: boolean;\n    overlayText?: string;\n    imageUri?: string;\n    resetOnStake?: boolean;\n  }\n```\n\n**Reward Distribution Parameters**\n\n```typescript\nexport type RewardDistributionParams {\n    stakePoolId: PublicKey;\n    rewardMintId: PublicKey;\n    rewardAmount?: BN;\n    rewardDurationSeconds?: BN;\n    kind?: RewardDistributorKind;\n    maxSupply?: BN;\n    supply?: BN;\n  }\n```\n\nThere are two types of reward distribution (RewardDistributionKind) with  Staking.\n\n1. **Mint** - give mint authority of your reward token to the stake pool so the pool can mint on demand\n2. **Treasury** - transfer reward tokens from your wallet to the stake pool, top-up the stake pool treasury balance whenever needed.\n\n## Environments\n\nThe program and related UIs are deployed on Solana mainnet-beta and devnet. By default the UI will point to mainnet. You can ovverride this by using `?cluster=devnet` in the URL or navigating to https://dev-stake.host.so. All configuration is scoped to that environment, and no data including pools, reward distributors, tokens, NFTs or sol will be carried over from mainnet to devnet and vice-versa.\n\n## Customizing your Stake Pool\n\nIn order to easily access your stake pool, airdrop NFTs on devnet for your specific collection and get a stake.host.so/[projectName] url, you'll need to create a Stake Pool metadata object. NOTE if you specified a verified creator in a devnet pool, airdropped NFTs will not be allowed into that pool because your creator will not be verified.\n\n```typescript\nexport type StakePoolMetadata = {\n  // Name of this stake pool used as an id. Should be in lower-case kebab-case since it is used in the URL as /{name}\n  // https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Why-you-should-make-kebab-case-a-URL-naming-convention-best-practice\n  name: string\n  // Display name to be displayed in the header. Often the same as name but with capital letters and spaces\n  displayName: string\n  // Publickey for this stake pool\n  stakePoolAddress: PublicKey\n  // Default receipt type. Setting this will remove the option for the user to choose which receipt type to use\n  receiptType?: ReceiptType\n  // Default empty. Setting this will tell the UI to only show tokens of that standard. Supports fungible or non-fungible\n  tokenStandard?: TokenStandard\n  // Optional config to hide this pool from the main page\n  hidden?: boolean\n  // Optional config to disable finding this pool\n  notFound?: boolean\n  // Optional hostname to remap -- SEE NOTE BELOW\n  hostname?: string\n  // Optional config to link redirect to page when you click on this pool\n  redirect?: string\n  // Hide allowed tokens style\n  hideAllowedTokens?: boolean\n  // styles to apply to the whole stake pool\n  styles?: CSSProperties\n  // Colors object to style the stake page\n  colors?: {\n    primary: string\n    secondary: string\n    accent?: string\n    fontColor?: string\n    fontColorSecondary?: string\n    backgroundSecondary?: string\n  }\n  // Disallow regions based on IP address\n  disallowRegions?: { code: string; subdivision?: string }[]\n  // Image url to be used as the icon in the pool selector and the header\n  imageUrl?: string\n  // Background banner image for pool\n  backgroundBannerImageUrl?: string\n  // Website url if specified will be navigated to when the image in the header is clicked\n  websiteUrl?: string\n  // Max staked is used to compute percentage of total staked\n  maxStaked?: number\n  // Links to show at the top right of the page\n  links?: { text: string; value: string }[]\n  // On devnet when you click the airdrop button on this page it will clone NFTs with this metadata and airdrop to the user. These will not contain verified creators\n  airdrops?: AirdropMetadata[]\n  // Analytics to show at the top of stake pool. supports trait based analytics and overall tokens data\n  analytics?: Analytic[]\n}\n```\n\nIn your pool's admin portal (eg. https://stake.host.so/admin/[poolId]), create your own config on-chain under the `Config` tab. You'll now be able to access your project at https://stake.host.so/[name].\n\n## Stake Pool Fees\n\nhttps://www.notion.so/-labs/-Staking-Fees-14e66a64fb2d4615892937c5dbaa91cc\n\n## Custom hostname\n\nFor a custom hostname...\n\n1. Add your `hostname` to your pool config in `api/mapping.ts`\n2. Open a PR to this repo with that change\n3. Set the following record on your DNS provider to continue:\n\n```\nType NAME CNAME\nCNAME {your subdomain} cname.vercel-dns.com\n```\n\n## Deployment and Beyond\n\nNow that you've made and deployed your  stake pool, you can either stick with 's UX for the stake pool experience or build your own.\n\nSimply modify `pages/[stakePoolId]/index.tsx` with your own react styling, and host the stake pool on your own domain.\n\n## Development\n\nTo get started, clone the repo and run:\n\n```bash\nyarn install\n```\n\nNext, run the development server:\n\n```bash\nyarn run dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the staking interface running locally.\n\n## Set your Cluster\n\nTo access different clusters in the scaffold, set the `cluster` query parameter in the URL:\n\n- Mainnet - http://localhost:3000?cluster=mainnet\n- Devnet - http://localhost:3000?cluster=devnet\n- Testnet - http://localhost:3000?cluster=testnet\n\nThe default cluster set is **mainnet**. It's recommended to ensure you have `?cluster=devnet` while testing out functionality.\n\n## Have questions?\n\nJoin our **[Discord](https://discord.gg/labs)** to get technical support as you build on .\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolana-nft-programs%2Fstaking-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolana-nft-programs%2Fstaking-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolana-nft-programs%2Fstaking-ui/lists"}