├── .env ├── public ├── logo.png ├── images │ ├── meta-redirect.png │ ├── facebook-mobile.png │ └── redirect-loops.png ├── i18n │ ├── zh.json │ ├── ko.json │ ├── ja.json │ ├── en.json │ ├── nl.json │ ├── sv.json │ ├── tr.json │ ├── de_DE.json │ ├── pl.json │ ├── ru.json │ ├── es.json │ ├── pt.json │ ├── it.json │ └── fr.json ├── data │ └── generated │ │ └── components-markdown.json ├── meta-redirect.html ├── vercel.svg ├── next.svg └── content │ └── components │ └── home │ └── block1 │ ├── zh.md │ ├── ko.md │ ├── ja.md │ ├── en.md │ ├── sv.md │ ├── tr.md │ ├── nl.md │ ├── pl.md │ ├── ru.md │ ├── es.md │ ├── fr.md │ ├── pt.md │ ├── de_DE.md │ └── it.md ├── src ├── app │ ├── favicon.ico │ ├── [locale] │ │ ├── not-found.tsx │ │ ├── (frontend) │ │ │ ├── [...rest] │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ └── (home) │ │ │ │ └── page.tsx │ │ ├── globals.css │ │ └── layout.tsx │ ├── robots.ts │ └── api │ │ ├── ipinfo │ │ └── route.ts │ │ └── redirectcheck │ │ └── route.ts ├── lib │ ├── i18n.ts │ ├── api.ts │ └── utils.ts ├── components │ ├── ui │ │ ├── skeleton.tsx │ │ ├── label.tsx │ │ ├── input.tsx │ │ ├── switch.tsx │ │ ├── accordion.tsx │ │ ├── button.tsx │ │ ├── typography.tsx │ │ ├── sheet.tsx │ │ ├── form.tsx │ │ ├── select.tsx │ │ └── dropdown-menu.tsx │ ├── frontend │ │ ├── shared │ │ │ ├── not-found.tsx │ │ │ ├── top.tsx │ │ │ ├── faqs.tsx │ │ │ ├── footer.tsx │ │ │ ├── header.tsx │ │ │ └── nav-bar.tsx │ │ └── page │ │ │ └── home │ │ │ ├── results.tsx │ │ │ └── main.tsx │ └── shared │ │ ├── mode-toggle.tsx │ │ ├── locale-switch.tsx │ │ ├── device-switch.tsx │ │ ├── browser-switch.tsx │ │ ├── markdown.tsx │ │ └── system-switch.tsx ├── middleware.ts ├── config.ts ├── types.ts └── i18n.ts ├── doc ├── images │ ├── Account-ID.png │ ├── copy-token.png │ ├── git-actions.png │ ├── my-profile.png │ ├── create-token.png │ ├── use-template.png │ ├── continue-summary.png │ ├── custom-domains.png │ ├── create-token-done.png │ ├── CLOUDFLARE_API_TOKEN.png │ ├── New-repository-secret.png │ ├── redirectchecker-pages.png │ └── Cloudflare-Pages-Dashboard.png └── workflows.md ├── env.d.ts ├── postcss.config.mjs ├── .vscode ├── extensions.json └── settings.json ├── CHANGELOG.md ├── .eslintrc.json ├── components.json ├── .gitignore ├── next.config.mjs ├── tsconfig.json ├── MIT-LICENSE ├── .github └── workflows │ ├── deploy-to-pages.yml │ └── deploy-to-preview.yml ├── bin └── generateComponentsMarkdownData.ts ├── tailwind.config.ts ├── package.json ├── wrangler.toml └── README.md /.env: -------------------------------------------------------------------------------- 1 | NODE_ENV=development -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/public/logo.png -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/src/app/favicon.ico -------------------------------------------------------------------------------- /doc/images/Account-ID.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/Account-ID.png -------------------------------------------------------------------------------- /doc/images/copy-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/copy-token.png -------------------------------------------------------------------------------- /doc/images/git-actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/git-actions.png -------------------------------------------------------------------------------- /doc/images/my-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/my-profile.png -------------------------------------------------------------------------------- /doc/images/create-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/create-token.png -------------------------------------------------------------------------------- /doc/images/use-template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/use-template.png -------------------------------------------------------------------------------- /doc/images/continue-summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/continue-summary.png -------------------------------------------------------------------------------- /doc/images/custom-domains.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/custom-domains.png -------------------------------------------------------------------------------- /public/images/meta-redirect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/public/images/meta-redirect.png -------------------------------------------------------------------------------- /doc/images/create-token-done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/create-token-done.png -------------------------------------------------------------------------------- /public/images/facebook-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/public/images/facebook-mobile.png -------------------------------------------------------------------------------- /public/images/redirect-loops.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/public/images/redirect-loops.png -------------------------------------------------------------------------------- /doc/images/CLOUDFLARE_API_TOKEN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/CLOUDFLARE_API_TOKEN.png -------------------------------------------------------------------------------- /doc/images/New-repository-secret.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/New-repository-secret.png -------------------------------------------------------------------------------- /doc/images/redirectchecker-pages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/redirectchecker-pages.png -------------------------------------------------------------------------------- /doc/images/Cloudflare-Pages-Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seadfeng/redirect-checker/HEAD/doc/images/Cloudflare-Pages-Dashboard.png -------------------------------------------------------------------------------- /env.d.ts: -------------------------------------------------------------------------------- 1 | // Generated by Wrangler 2 | // by running `wrangler types --env-interface CloudflareEnv env.d.ts` 3 | 4 | interface CloudflareEnv { 5 | } 6 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /src/app/[locale]/not-found.tsx: -------------------------------------------------------------------------------- 1 | import { redirect } from 'next/navigation'; 2 | export const runtime = 'edge'; 3 | 4 | export default function RootPage() { 5 | redirect('/404'); 6 | } -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "esbenp.prettier-vscode", 4 | "dbaeumer.vscode-eslint", 5 | "lokalise.i18n-ally", 6 | "bradlc.vscode-tailwindcss" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /src/app/[locale]/(frontend)/[...rest]/page.tsx: -------------------------------------------------------------------------------- 1 | import { NotFound } from "@/frontend/shared/not-found"; 2 | export const runtime = 'edge'; 3 | 4 | export default function NotFoundPage() { 5 | return ; 6 | } 7 | -------------------------------------------------------------------------------- /public/i18n/zh.json: -------------------------------------------------------------------------------- 1 | { 2 | "shared": { 3 | "mobile": "移动", 4 | "desktop": "桌面" 5 | }, 6 | "frontend": { 7 | "home": { 8 | "duration": "时长", 9 | "trace_url": "跟踪网址", 10 | "strip_tracking_parameters": "删除跟踪参数" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/robots.ts: -------------------------------------------------------------------------------- 1 | import type { MetadataRoute } from "next"; 2 | export const runtime = 'edge'; 3 | 4 | export default function robots(): MetadataRoute.Robots { 5 | return { 6 | rules: { 7 | userAgent: "*", 8 | allow: "/", 9 | } 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /src/lib/i18n.ts: -------------------------------------------------------------------------------- 1 | import { appConfig } from "@/config"; 2 | import { createSharedPathnamesNavigation } from "next-intl/navigation"; 3 | 4 | export const { Link, redirect, usePathname, useRouter } = createSharedPathnamesNavigation({ 5 | locales: appConfig.i18n.locales, 6 | localePrefix: "as-needed" 7 | }); 8 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG 2 | 3 | ## 0.1.1.rc 4 | 5 | - Add Github Actiosn: Deploy Preview 6 | 7 | ## 0.1.2.rc 8 | 9 | - remove appConfig.origin 10 | - update Github Actiosn 11 | 12 | 13 | ## 0.1.3.rc 14 | 15 | - add alternates to generateMetadata 16 | - add `x-request-url` to headers (middleware.ts) -------------------------------------------------------------------------------- /public/data/generated/components-markdown.json: -------------------------------------------------------------------------------- 1 | { 2 | "home/block1": { 3 | "locales": [ 4 | "de_DE", 5 | "en", 6 | "es", 7 | "fr", 8 | "it", 9 | "ja", 10 | "ko", 11 | "nl", 12 | "pl", 13 | "pt", 14 | "ru", 15 | "sv", 16 | "tr", 17 | "zh" 18 | ] 19 | } 20 | } -------------------------------------------------------------------------------- /public/meta-redirect.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 |

The page has moved to: 10 | this page

11 | 12 | -------------------------------------------------------------------------------- /src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "next/core-web-vitals", 4 | "eslint:recommended", 5 | "plugin:@typescript-eslint/recommended", 6 | "plugin:prettier/recommended", 7 | "plugin:react/recommended" 8 | ], 9 | "plugins": [ 10 | "react", 11 | "@typescript-eslint", 12 | "react-hooks", 13 | "prettier" 14 | ], 15 | "rules": { 16 | "react/react-in-jsx-scope": "off" 17 | } 18 | } -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "src/app/[locale]/globals.css", 9 | "baseColor": "slate", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils" 16 | } 17 | } -------------------------------------------------------------------------------- /src/app/[locale]/(frontend)/layout.tsx: -------------------------------------------------------------------------------- 1 | import { Footer } from "@/frontend/shared/footer"; 2 | import { Header } from "@/frontend/shared/header"; 3 | import { Top } from "@/frontend/shared/top"; 4 | import type { PropsWithChildren } from "react"; 5 | export const runtime = 'edge'; 6 | 7 | export default function FrontendLayout({ children }: PropsWithChildren) { 8 | return ( 9 | <> 10 |
11 |
12 | {children} 13 |
14 |