client-side-oauth / index.html
mediarelationsroshanaf's picture
Dear Mohamamd ashraf, you have received Amount 1025 AFN from Mohammad naeem mohammadi, Current balance:1056 AFN,Tnx ID#8107783. Happy Selling
017474c verified
raw
history blame
14.5 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI Assistant Activated | Hourly 150MB</title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.animate-float {
animation: float 6s ease-in-out infinite;
}
@keyframes float {
0% { transform: translateY(0px) rotate(0deg); }
50% { transform: translateY(-20px) rotate(3deg); }
100% { transform: translateY(0px) rotate(0deg); }
}
.gradient-text {
background: linear-gradient(90deg, #6366f1, #8b5cf6, #ec4899);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
background-size: 300% 300%;
animation: gradient 8s ease infinite;
}
@keyframes gradient {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.card-hover {
transition: all 0.3s ease;
}
.card-hover:hover {
transform: translateY(-5px) translateZ(0);
}
.pulse {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
.smooth-shadow {
box-shadow: 0 10px 30px -10px rgba(99, 102, 241, 0.15);
}
.input-shadow:focus {
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3);
}
.progress-bar {
animation: progress 90s linear 1 forwards;
}
@keyframes progress {
0% { width: 100%; }
100% { width: 0%; }
}
</style>
</head>
<body class="font-['Inter'] bg-gradient-to-br from-gray-50 to-indigo-50 min-h-screen flex items-center justify-center p-4 sm:p-6">
<div class="max-w-4xl w-full mx-auto">
<!-- Notification Header -->
<div class="bg-indigo-600/10 border border-indigo-600/20 text-indigo-800 px-4 py-3 rounded-lg mb-8 flex items-start">
<div class="flex-shrink-0 pt-1 mr-3">
<i class="fas fa-check-circle text-indigo-600"></i>
</div>
<div class="flex-1">
<p class="font-medium">Hourly 150MB successfully activated!</p>
<p class="text-sm text-indigo-700/90 mt-1">Your AI assistant is now ready with maximum resources.</p>
</div>
<button class="text-indigo-600 hover:text-indigo-800 ml-2">
<i class="fas fa-times"></i>
</button>
</div>
<!-- Main Content -->
<div class="bg-white rounded-2xl smooth-shadow overflow-hidden">
<!-- Status Bar -->
<div class="bg-gradient-to-r from-indigo-500 to-purple-500 text-white px-6 py-4 flex flex-col sm:flex-row sm:items-center sm:justify-between">
<div class="flex items-center mb-3 sm:mb-0">
<div class="bg-white/20 rounded-full p-2 mr-3">
<i class="fas fa-bolt text-yellow-200 text-sm"></i>
</div>
<div>
<h2 class="font-bold text-lg sm:text-xl">AI Assistant Pro</h2>
<p class="text-xs text-indigo-100 flex items-center">
<span class="inline-block w-2 h-2 bg-green-300 rounded-full mr-1"></span>
Active connection
</p>
</div>
</div>
<div class="flex items-center space-x-4">
<div class="text-center">
<p class="text-xs text-indigo-100 mb-1">Session Time</p>
<p class="text-sm font-medium">60:00</p>
</div>
<div class="hidden sm:block h-6 w-px bg-indigo-400"></div>
<div class="text-center">
<p class="text-xs text-indigo-100 mb-1">Resources</p>
<div class="flex items-center">
<i class="fas fa-memory text-xs mr-1 text-indigo-100"></i>
<p class="text-sm font-medium">150MB</p>
</div>
</div>
</div>
</div>
<!-- Progress Bar -->
<div class="h-1.5 bg-indigo-100 relative overflow-hidden">
<div class="progress-bar h-full bg-indigo-500 absolute top-0 left-0"></div>
</div>
<!-- Avatar Section -->
<div class="flex items-center justify-center py-8 px-6">
<div class="relative">
<div class="absolute -inset-4 bg-indigo-500/10 rounded-full blur-lg animate-pulse"></div>
<div class="relative bg-white p-5 rounded-full shadow-lg animate-float">
<div class="w-24 h-24 bg-gradient-to-br from-indigo-100 to-purple-100 rounded-full flex items-center justify-center">
<i class="fas fa-robot text-4xl gradient-text"></i>
</div>
</div>
</div>
</div>
<div class="px-6 pb-1">
<h1 class="text-3xl sm:text-4xl font-bold text-center text-gray-800 mb-3">
<span class="gradient-text">Ready to Assist</span>
<span class="text-gray-500">You!</span>
</h1>
<p class="text-gray-500 text-center max-w-2xl mx-auto mb-8">
I'm powered up with 150MB of resources to provide you with the best assistance possible.
Ask me anything and I'll respond with thoughtful, detailed answers.
</p>
</div>
<!-- Features Section -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-5 px-6 py-4 bg-gradient-to-b from-indigo-50 to-white">
<div class="bg-white rounded-xl p-5 card-hover shadow-sm border border-gray-100">
<div class="bg-indigo-50 w-12 h-12 rounded-lg flex items-center justify-center mb-4">
<i class="fas fa-bolt text-xl text-indigo-500"></i>
</div>
<h3 class="font-semibold text-lg mb-2 text-gray-800">High-Performance</h3>
<p class="text-gray-500 text-sm">Optimized responses with maximum allocated resources</p>
</div>
<div class="bg-white rounded-xl p-5 card-hover shadow-sm border border-gray-100">
<div class="bg-purple-50 w-12 h-12 rounded-lg flex items-center justify-center mb-4">
<i class="fas fa-brain text-xl text-purple-500"></i>
</div>
<h3 class="font-semibold text-lg mb-2 text-gray-800">Enhanced AI</h3>
<p class="text-gray-500 text-sm">More memory means better comprehension and recall</p>
</div>
<div class="bg-white rounded-xl p-5 card-hover shadow-sm border border-gray-100">
<div class="bg-pink-50 w-12 h-12 rounded-lg flex items-center justify-center mb-4">
<i class="fas fa-code text-xl text-pink-500"></i>
</div>
<h3 class="font-semibold text-lg mb-2 text-gray-800">Code Support</h3>
<p class="text-gray-500 text-sm">Full programming assistance with syntax highlighting</p>
</div>
</div>
<!-- Input Section -->
<div class="px-6 py-6">
<div class="relative">
<textarea
class="w-full px-5 py-4 bg-gray-50 rounded-2xl border-none input-shadow focus:ring-2 focus:ring-indigo-200 focus:border-transparent resize-none"
rows="3"
placeholder="Ask your question here... (150MB resources allocated)"
autofocus
></textarea>
<button class="absolute right-4 bottom-4 bg-indigo-500 hover:bg-indigo-600 text-white rounded-xl px-5 py-2 transition-all flex items-center shadow-md hover:shadow-lg">
<i class="fas fa-paper-plane mr-2"></i>
<span>Send</span>
</button>
</div>
<p class="text-xs text-gray-400 mt-3 flex items-center">
<i class="fas fa-info-circle mr-1.5"></i>
Your data and conversations are processed securely with your allocated 150MB resources
</p>
</div>
</div>
Dear Mohamamd ashraf, you have received Amount 1025 AFN from Mohammad naeem mohammadi, Current balance:1056 AFN,Tnx ID#8107783.
<!-- Footer -->
<div class="flex flex-col sm:flex-row items-center justify-between mt-6 text-sm text-gray-500">
<div class="flex items-center mb-3 sm:mb-0">
<div class="h-3 w-3 rounded-full bg-green-400 mr-2 pulse"></div>
<span>System status: Operational</span>
</div>
<div class="flex items-center space-x-4">
<a href="#" class="hover:text-indigo-600 transition-colors"><i class="fas fa-shield-alt mr-1"></i> Security</a>
<a href="#" class="hover:text-indigo-600 transition-colors"><i class="fas fa-cog mr-1"></i> Settings</a>
<a href="#" class="hover:text-indigo-600 transition-colors"><i class="fas fa-question-circle mr-1"></i> Help</a>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Update session timer
function updateTimer() {
let minutes = 59;
let seconds = 59;
const timerElement = document.querySelector('.status-timer');
const timerInterval = setInterval(() => {
seconds--;
if (seconds < 0) {
seconds = 59;
minutes--;
}
if (minutes < 0) {
clearInterval(timerInterval);
} else {
timerElement.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
}
}, 1000);
}
updateTimer();
// Textarea auto-resize
const textarea = document.querySelector('textarea');
textarea.addEventListener('input', function() {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
});
// Add decoration to text on hover
const sendButton = document.querySelector('button');
sendButton.addEventListener('mouseenter', function() {
this.innerHTML = '<i class="fas fa-paper-plane mr-2 animate-bounce"></i><span>Send</span>';
});
sendButton.addEventListener('mouseleave', function() {
this.innerHTML = '<i class="fas fa-paper-plane mr-2"></i><span>Send</span>';
});
});
</script>
</body>
</html><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>My static Space</title>
<link rel="stylesheet" href="style.css" />
<script src="https://unpkg.com/es-module-shims@1.7.0/dist/es-module-shims.js"></script>
<script type="importmap">
{
"imports": {
"@huggingface/hub": "https://cdn.jsdelivr.net/npm/@huggingface/hub@0.21.0/+esm"
}
}
</script>
</head>
<body>
<div class="card" style="margin-bottom: 2rem;">
<h1>OAuth in a static Space</h1>
<p>Checkout the <a href="https://huggingface.co/spaces/huggingfacejs/client-side-oauth/blob/main/index.html" target="_blank">index.html</a> file to see the few lines of code
enabling this space</p>
<p>After clicking "Signin with HF", you will be redirected to this space and the access token + user info will be displayed.</p>
</div>
<img src="https://huggingface.co/datasets/huggingface/badges/resolve/main/sign-in-with-huggingface-xl-dark.svg" alt="Sign in with Hugging Face" style="cursor: pointer; display: none;" id="signin">
<button id="signout" style="display: none">Sign out</button>
<pre>
</pre>
<script type="module">
import { oauthLoginUrl, oauthHandleRedirectIfPresent } from "@huggingface/hub";
console.log("huggingface env", window.huggingface);
let oauthResult = localStorage.getItem("oauth");
if (oauthResult) {
try {
oauthResult = JSON.parse(oauthResult);
} catch {
oauthResult = null;
}
}
oauthResult ||= await oauthHandleRedirectIfPresent();
if (oauthResult) {
document.querySelector("pre").textContent = JSON.stringify(oauthResult, null, 2);
localStorage.setItem("oauth", JSON.stringify(oauthResult));
document.getElementById("signout").style.removeProperty("display");
document.getElementById("signout").onclick = async function() {
localStorage.removeItem("oauth");
window.location.href = window.location.href.replace(/\?.*$/, '');
window.location.reload();
}
} else {
document.getElementById("signin").style.removeProperty("display");
document.getElementById("signin").onclick = async function() {
// prompt=consent to re-trigger the consent screen instead of silently redirecting
window.location.href = (await oauthLoginUrl({scopes: window.huggingface.variables.OAUTH_SCOPES})) + "&prompt=consent";
}
}
</script>
</body>
</html>