Initial commit

This commit is contained in:
dk
2026-01-16 17:44:35 +02:00
commit 9815d65404
12 changed files with 1571 additions and 0 deletions

1
.env.production Normal file
View File

@@ -0,0 +1 @@
DISABLE_ESLINT_PLUGIN=true

View File

@@ -0,0 +1,62 @@
name: Build
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch to build'
required: true
default: 'main'
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout branch
uses: actions/checkout@v3
with:
ref: ${{ gitea.event.inputs.branch }}
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 24
- name: Install dependencies
run: |
set -euo pipefail
npm install --no-audit --silent 2>&1 | tee install.log
env:
NODE_OPTIONS: '--max-old-space-size=4096'
- name: Build (react-scripts build)
env:
CI: 'false'
NODE_OPTIONS: '--max-old-space-size=4096'
run: |
set -euo pipefail
npm run build 2>&1 | tee build.log
timeout-minutes: 5
- name: Verify build folder exists
run: test -d build || (echo "No build folder. Check build logs above."; exit 1)
- name: Upload logs on failure
if: failure()
uses: actions/upload-artifact@v3
with:
name: build-logs
path: |
install.log
build.log
npm-debug.log*
if-no-files-found: ignore
- name: Build completed
if: success()
run: echo "Build completed successfully"

41
package.json Normal file
View File

@@ -0,0 +1,41 @@
{
"name": "claude-security-check",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-scripts": "^5.0.1",
"framer-motion": "^11.0.0",
"lucide-react": "^0.400.0"
},
"devDependencies": {
"tailwindcss": "^3.4.0",
"postcss": "^8.4.0",
"autoprefixer": "^10.4.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

6
postcss.config.js Normal file
View File

@@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

File diff suppressed because one or more lines are too long

1232
public/index.html Normal file

File diff suppressed because it is too large Load Diff

12
src/App.js Normal file
View File

@@ -0,0 +1,12 @@
import React from 'react';
import SecurityCheck from './components/SecurityCheck';
function App() {
return (
<div className="App">
<SecurityCheck />
</div>
);
}
export default App;

View File

@@ -0,0 +1,145 @@
import React from 'react';
import { motion, useReducedMotion } from 'framer-motion';
import { Zap } from 'lucide-react';
const fadeUpPreset = (delay = 0, duration = 0.8) => ({
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
transition: { delay, duration, ease: 'easeOut' }
});
function SecurityCheck() {
const shouldReduceMotion = useReducedMotion();
if (shouldReduceMotion) {
return (
<div className="min-h-screen bg-claude-light-gray flex flex-col items-center justify-center px-4">
<div className="security-card text-center">
<div className="claude-logo justify-center mb-8">
<Zap className="w-6 h-6 text-claude-orange" />
<span className="text-claude-text">claude.ai</span>
</div>
<h1 className="text-lg font-medium text-claude-text mb-6">
Verify you are human by completing the action below.
</h1>
<div className="captcha-container mb-6">
<input
type="checkbox"
id="human-verify"
className="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2"
/>
<label htmlFor="human-verify" className="text-sm text-claude-text">
Verify you are human
</label>
<div className="ml-auto">
<img
src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjRkY2NjAwIi8+Cjx0ZXh0IHg9IjIwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEyIiBmaWxsPSJ3aGl0ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Q0Y8L3RleHQ+Cjwvc3ZnPgo="
alt="Cloudflare"
className="w-8 h-8"
/>
</div>
</div>
<div className="text-sm text-claude-gray mb-4">
<a href="#" className="text-blue-600 hover:underline">Privacy</a>
<span className="mx-1"></span>
<a href="#" className="text-blue-600 hover:underline">Terms</a>
</div>
</div>
<div className="mt-8 text-center">
<p className="text-claude-text mb-4">
claude.ai needs to review the security of your connection before proceeding.
</p>
<div className="text-xs text-claude-gray">
<p>Ray ID: 9beebae23c38dc3</p>
<p>
Performance & security by{' '}
<a href="#" className="text-cloudflare-blue hover:underline">
Cloudflare
</a>
</p>
</div>
</div>
</div>
);
}
return (
<div className="min-h-screen bg-claude-light-gray flex flex-col items-center justify-center px-4">
<motion.div
{...fadeUpPreset(0.1, 0.6)}
className="security-card text-center"
>
<motion.div
{...fadeUpPreset(0.2, 0.5)}
className="claude-logo justify-center mb-8"
>
<Zap className="w-6 h-6 text-claude-orange" />
<span className="text-claude-text">claude.ai</span>
</motion.div>
<motion.h1
{...fadeUpPreset(0.3, 0.5)}
className="text-lg font-medium text-claude-text mb-6"
>
Verify you are human by completing the action below.
</motion.h1>
<motion.div
{...fadeUpPreset(0.4, 0.5)}
className="captcha-container mb-6"
>
<input
type="checkbox"
id="human-verify"
className="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2"
/>
<label htmlFor="human-verify" className="text-sm text-claude-text">
Verify you are human
</label>
<div className="ml-auto">
<img
src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjRkY2NjAwIi8+Cjx0ZXh0IHg9IjIwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEyIiBmaWxsPSJ3aGl0ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Q0Y8L3RleHQ+Cjwvc3ZnPgo="
alt="Cloudflare"
className="w-8 h-8"
/>
</div>
</motion.div>
<motion.div
{...fadeUpPreset(0.5, 0.5)}
className="text-sm text-claude-gray mb-4"
>
<a href="#" className="text-blue-600 hover:underline">Privacy</a>
<span className="mx-1"></span>
<a href="#" className="text-blue-600 hover:underline">Terms</a>
</motion.div>
</motion.div>
<motion.div
{...fadeUpPreset(0.6, 0.5)}
className="mt-8 text-center"
>
<p className="text-claude-text mb-4">
claude.ai needs to review the security of your connection before proceeding.
</p>
<div className="text-xs text-claude-gray">
<p>Ray ID: 9beebae23c38dc3</p>
<p>
Performance & security by{' '}
<a href="#" className="text-cloudflare-blue hover:underline">
Cloudflare
</a>
</p>
</div>
</motion.div>
</div>
);
}
export default SecurityCheck;

31
src/index.css Normal file
View File

@@ -0,0 +1,31 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
html {
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
body {
margin: 0;
padding: 0;
background-color: #F7FAFC;
color: #2D3748;
line-height: 1.5;
}
}
@layer components {
.claude-logo {
@apply flex items-center gap-2 text-xl font-medium;
}
.security-card {
@apply bg-white rounded-lg shadow-sm border border-gray-200 p-8 max-w-md mx-auto;
}
.captcha-container {
@apply border border-gray-300 rounded p-4 bg-gray-50 flex items-center gap-3;
}
}

13
src/index.js Normal file
View File

@@ -0,0 +1,13 @@
import React from 'react';
import { createRoot } from 'react-dom/client';
import './index.css';
import App from './App';
const container = document.getElementById('root');
const root = createRoot(container);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);

22
tailwind.config.js Normal file
View File

@@ -0,0 +1,22 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./src/**/*.{js,jsx,ts,tsx}",
"./public/index.html"
],
theme: {
extend: {
colors: {
'claude-orange': '#E97441',
'claude-text': '#2D3748',
'claude-gray': '#718096',
'claude-light-gray': '#F7FAFC',
'cloudflare-blue': '#0066CC'
},
fontFamily: {
'sans': ['system-ui', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'sans-serif']
}
},
},
plugins: [],
}

5
vercel.json Normal file
View File

@@ -0,0 +1,5 @@
{
"installCommand": "npm install",
"buildCommand": "CI=false npm run build",
"outputDirectory": "build"
}