|
import { BackendHealthCheck } from "./components/BackendHealthCheck"; |
|
import OAuthButton from "./components/OAuthButton"; |
|
import Counter from "./components/Counter"; |
|
import huggingfaceLogo from "./assets/huggingface.svg"; |
|
|
|
function App() { |
|
return ( |
|
<div className="min-h-screen bg-gradient-to-br from-gray-900 via-gray-800 to-gray-900 text-white flex flex-col"> |
|
{!import.meta.env.PROD && <BackendHealthCheck />} |
|
|
|
<div className="text-center pt-8 pb-6"> |
|
<div className="flex items-center justify-center space-x-3 mb-4"> |
|
<img src={huggingfaceLogo} alt="Hugging Face" className="h-8 w-8" /> |
|
<h1 className="text-3xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent"> |
|
FastAPI + React Template |
|
</h1> |
|
</div> |
|
<p className="text-gray-300 text-lg max-w-2xl mx-auto"> |
|
A complete full-stack template to start vide-coding your own Hugging |
|
Face Space. |
|
</p> |
|
</div> |
|
|
|
<div className="flex-1 max-w-6xl mx-auto px-8"> |
|
<div className="bg-gray-800/50 backdrop-blur-sm rounded-2xl p-10 mb-8 border border-gray-700/50 shadow-2xl"> |
|
<div className="text-center mb-6"> |
|
<h2 className="text-2xl font-semibold mb-2">Try the demo</h2> |
|
<p className="text-gray-300"> |
|
Sign in with Hugging Face to interact with the counter |
|
</p> |
|
</div> |
|
<div className="space-y-6 max-w-md mx-auto"> |
|
<OAuthButton /> |
|
<Counter /> |
|
</div> |
|
</div> |
|
|
|
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6 mb-8"> |
|
<div className="bg-gray-800/30 backdrop-blur-sm rounded-xl p-6 border border-gray-700/30"> |
|
<div className="text-blue-400 text-2xl mb-3">π</div> |
|
<h3 className="text-lg font-semibold mb-2">Built for HF Spaces</h3> |
|
<p className="text-gray-300 text-sm"> |
|
Pre-configured for instant deployment on Hugging Face Spaces |
|
</p> |
|
</div> |
|
|
|
<div className="bg-gray-800/30 backdrop-blur-sm rounded-xl p-6 border border-gray-700/30"> |
|
<div className="text-pink-400 text-2xl mb-3">β¨</div> |
|
<h3 className="text-lg font-semibold mb-2">Vibe-coding ready</h3> |
|
<p className="text-gray-300 text-sm"> |
|
Optimized for AI-assisted development |
|
</p> |
|
</div> |
|
|
|
<div className="bg-gray-800/30 backdrop-blur-sm rounded-xl p-6 border border-gray-700/30"> |
|
<div className="text-yellow-400 text-2xl mb-3">π€</div> |
|
<h3 className="text-lg font-semibold mb-2"> |
|
Sign in with Hugging Face |
|
</h3> |
|
<p className="text-gray-300 text-sm"> |
|
OAuth integration, no setup required |
|
</p> |
|
</div> |
|
|
|
<div className="bg-gray-800/30 backdrop-blur-sm rounded-xl p-6 border border-gray-700/30"> |
|
<div className="text-green-400 text-2xl mb-3">β‘</div> |
|
<h3 className="text-lg font-semibold mb-2">FastAPI Backend</h3> |
|
<p className="text-gray-300 text-sm">Modern Python backend</p> |
|
</div> |
|
|
|
<div className="bg-gray-800/30 backdrop-blur-sm rounded-xl p-6 border border-gray-700/30"> |
|
<div className="text-purple-400 text-2xl mb-3">π¨</div> |
|
<h3 className="text-lg font-semibold mb-2">React + Tailwind</h3> |
|
<p className="text-gray-300 text-sm"> |
|
Beautiful and responsive frontend |
|
</p> |
|
</div> |
|
|
|
<div className="bg-gray-800/30 backdrop-blur-sm rounded-xl p-6 border border-gray-700/30"> |
|
<div className="text-cyan-400 text-2xl mb-3">πΎ</div> |
|
<h3 className="text-lg font-semibold mb-2"> |
|
SQLite + Parquet backups |
|
</h3> |
|
<p className="text-gray-300 text-sm"> |
|
Work with SQLite locally, but persist data in a HF dataset as parquet |
|
</p> |
|
</div> |
|
</div> |
|
|
|
<div className="bg-gray-800/20 backdrop-blur-sm rounded-xl p-6 border border-gray-700/20 mb-8"> |
|
<h3 className="text-xl font-semibold mb-4 text-center"> |
|
Duplicate this Space to start building! |
|
</h3> |
|
</div> |
|
</div> |
|
</div> |
|
); |
|
} |
|
|
|
export default App; |
|
|