├── components ├── Sats.css ├── TransferHistory.module.css ├── ClientOnly.tsx ├── BlocksWrapper.tsx ├── Collapsible.tsx ├── inscriptions │ ├── Iframe.tsx │ ├── InscriptionRenderImage.tsx │ ├── InscriptionRender.tsx │ ├── json-viewer.css │ ├── InscriptionCard.tsx │ ├── InscriptionRenderText.tsx │ └── InscriptionRenderJson.tsx ├── Ellipsis.tsx ├── TimeAgo.tsx ├── SvgPattern.tsx ├── CtaLink.tsx ├── TruncatingTooltip.tsx ├── icons │ ├── IconUpRight.tsx │ ├── IconAudio.tsx │ ├── IconVideo.tsx │ ├── IconFlame.tsx │ ├── IconTwitter.tsx │ ├── IconShrink.tsx │ ├── IconImage.tsx │ ├── IconExpand.tsx │ ├── IconText.tsx │ ├── IconSparkle.tsx │ ├── IconFile.tsx │ ├── IconEye.tsx │ └── IconUnicorn.tsx ├── SatsList.tsx ├── WithInscription.tsx ├── HoverCard.tsx ├── Error.tsx ├── Sort.tsx ├── Intro.tsx ├── SatsListWrapper.tsx ├── CopyButton.tsx ├── Loading.tsx ├── GalleryPreview.tsx ├── Tooltip.tsx ├── Charts.tsx ├── RarityTag.tsx ├── BlockDetails.tsx ├── Thumbnail.tsx ├── TextFilter.tsx ├── AddressDetails.tsx ├── Filter.tsx ├── AnimatedText.tsx ├── RangeFilter.tsx ├── DateFilter.tsx ├── Footer.tsx ├── Select.tsx ├── Dialog.tsx ├── SatsGrid.tsx ├── Brc20Homepage.tsx ├── Header.tsx ├── ui │ └── dialog.tsx ├── GalleryFull.tsx ├── SatDetails.tsx ├── LineChart.ts ├── Brc20Details.tsx ├── Brc20BalancesTable.tsx ├── Brc20HoldersTable.tsx ├── Blocks.tsx └── TransferHistory.tsx ├── .eslintrc.json ├── assets ├── Inter.ttf └── Inter-Regular.woff ├── public ├── noise.png ├── favicon.ico ├── og-image.png ├── brc20 │ ├── meme.png │ ├── ordi.png │ ├── pepe.png │ └── punk.png ├── favicon-16x16.png ├── favicon-32x32.png ├── mstile-70x70.png ├── mstile-144x144.png ├── mstile-150x150.png ├── mstile-310x150.png ├── mstile-310x310.png ├── apple-touch-icon.png ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── hiro-logo-dark.svg ├── hiro-dark.svg ├── hiro-light.svg ├── site.webmanifest ├── b-illustration.svg ├── safari-pinned-tab.svg └── logo.svg ├── postcss.config.js ├── .vscode └── settings.json ├── .env.sample ├── lib ├── store.ts ├── constants.ts ├── hooks.ts ├── types.ts └── utils.ts ├── prettier.config.js ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── feature_request.md │ └── bug_report.md ├── PULL_REQUEST_TEMPLATE.md └── CONTRIBUTING.md ├── app ├── (misc) │ └── ogimage │ │ └── [iid] │ │ ├── layout.tsx │ │ ├── misc.css │ │ └── page.tsx └── (explorer) │ ├── protocols │ └── brc-20 │ │ ├── [ticker] │ │ └── page.tsx │ │ └── page.tsx │ ├── sat │ └── [sid] │ │ └── page.tsx │ ├── block │ └── [bid] │ │ └── page.tsx │ ├── address │ └── [aid] │ │ └── page.tsx │ ├── period │ ├── [pid] │ │ └── page.tsx │ └── page.tsx │ ├── inscription │ └── [iid] │ │ └── page.tsx │ ├── stats │ └── page.tsx │ ├── page.tsx │ ├── layout.tsx │ └── globals.css ├── .gitignore ├── tsconfig.json ├── next.config.js ├── tailwind.config.js ├── package.json └── README.md /components/Sats.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /assets/Inter.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/assets/Inter.ttf -------------------------------------------------------------------------------- /public/noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/noise.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/og-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/og-image.png -------------------------------------------------------------------------------- /public/brc20/meme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/brc20/meme.png -------------------------------------------------------------------------------- /public/brc20/ordi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/brc20/ordi.png -------------------------------------------------------------------------------- /public/brc20/pepe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/brc20/pepe.png -------------------------------------------------------------------------------- /public/brc20/punk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/brc20/punk.png -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-70x70.png -------------------------------------------------------------------------------- /assets/Inter-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/assets/Inter-Regular.woff -------------------------------------------------------------------------------- /public/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-144x144.png -------------------------------------------------------------------------------- /public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-150x150.png -------------------------------------------------------------------------------- /public/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-310x150.png -------------------------------------------------------------------------------- /public/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/mstile-310x310.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hirosystems/ordinals-explorer/HEAD/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib", 3 | "typescript.enablePromptUseWorkspaceTsdk": true 4 | } -------------------------------------------------------------------------------- /.env.sample: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_API_URL=https://api.hiro.so/ordinals/v1 2 | NEXT_PUBLIC_API_BETA_URL= 3 | NEXT_PUBLIC_PREVIEW_URL= 4 | ENABLE_CSP= 5 | -------------------------------------------------------------------------------- /components/TransferHistory.module.css: -------------------------------------------------------------------------------- 1 | .gradient { 2 | filter: saturate(20%) brightness(75%); 3 | } 4 | 5 | .gradient:hover { 6 | filter: initial; 7 | } 8 | -------------------------------------------------------------------------------- /lib/store.ts: -------------------------------------------------------------------------------- 1 | import { atom } from "jotai"; 2 | 3 | export const lastInscriptionDataAtom = atom<{ 4 | number: string; 5 | date: Date; 6 | } | null>(null); 7 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | const TailwindPlugin = require("prettier-plugin-tailwindcss"); 2 | 3 | module.exports = { 4 | extends: ["@stacks/prettier-config"], 5 | plugins: [TailwindPlugin], 6 | }; 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: Ask the community 3 | url: https://stacks.chat/ 4 | about: Ask and discuss questions with other Stacks community developers. 5 | -------------------------------------------------------------------------------- /lib/constants.ts: -------------------------------------------------------------------------------- 1 | export const TILE_SIZE = 16; 2 | 3 | export const API_URL = 4 | process.env.NEXT_PUBLIC_API_URL ?? "https://api.hiro.so/ordinals/v1"; 5 | 6 | export const API_BETA_URL = process.env.NEXT_PUBLIC_API_BETA_URL ?? API_URL; 7 | -------------------------------------------------------------------------------- /app/(misc)/ogimage/[iid]/layout.tsx: -------------------------------------------------------------------------------- 1 | import "./misc.css"; 2 | 3 | export default function RootLayout({ 4 | children, 5 | }: { 6 | children: React.ReactNode; 7 | }) { 8 | return ( 9 | 10 | {children} 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /components/ClientOnly.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useHasMounted } from "../lib/hooks"; 4 | 5 | const ClientOnly = ({ children }: { children: React.ReactNode }) => { 6 | const hasMounted = useHasMounted(); 7 | if (!hasMounted) return null; 8 | return <>{children}; 9 | }; 10 | 11 | export default ClientOnly; 12 | -------------------------------------------------------------------------------- /components/BlocksWrapper.tsx: -------------------------------------------------------------------------------- 1 | import { PeriodResponse } from "../lib/types"; 2 | import Blocks from "./Blocks"; 3 | 4 | const BlocksWrapper = ({ data }: { data: PeriodResponse }) => { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | }; 11 | 12 | export default BlocksWrapper; 13 | -------------------------------------------------------------------------------- /public/hiro-logo-dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/(explorer)/protocols/brc-20/[ticker]/page.tsx: -------------------------------------------------------------------------------- 1 | import Brc20Details from "../../../../../components/Brc20Details"; 2 | 3 | const Page = ({ params }: { params: { ticker: string } }) => { 4 | return ( 5 |
6 | 7 |
8 | ); 9 | }; 10 | 11 | export default Page; 12 | -------------------------------------------------------------------------------- /app/(explorer)/sat/[sid]/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import SatDetails from "../../../../components/SatDetails"; 4 | 5 | const SatPage = ({ params }: { params: { sid: string } }) => { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | }; 12 | 13 | export default SatPage; 14 | -------------------------------------------------------------------------------- /app/(explorer)/block/[bid]/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import BlockDetails from "../../../../components/BlockDetails"; 4 | 5 | const BlockById = ({ params }: { params: { bid: string } }) => { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | }; 12 | 13 | export default BlockById; 14 | -------------------------------------------------------------------------------- /components/Collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible"; 4 | 5 | const Collapsible = CollapsiblePrimitive.Root; 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger; 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent; 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent }; 12 | -------------------------------------------------------------------------------- /components/inscriptions/Iframe.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "../../lib/utils"; 2 | 3 | const Iframe = (props: { src: string; className?: string }) => { 4 | return ( 5 |