Files
sitemente/app/mission-control/resume-upload/page.tsx
T
horus 45af56d9cf feat(mission-control): restore MC tabs - temple, office, memory, claude, pdf-viewer, resume, resume-upload, temple-3d, demos
Also added:
- Memory API endpoints
- Briefs API endpoints
- AnveVoice stats API
- Claude spawn API
- TTS proxy
- Cleopatra voice widget
- api-auth middleware
2026-03-23 16:30:44 +01:00

82 lines
2.7 KiB
TypeScript

"use client";
import { useState } from "react";
export default function ResumeUploadPage() {
const [uploading, setUploading] = useState(false);
const [uploadedImages, setUploadedImages] = useState<string[]>([]);
const handleUpload = async (e: React.ChangeEvent<HTMLInputElement>) => {
const files = e.target.files;
if (!files) return;
setUploading(true);
const newImages: string[] = [];
for (let i = 0; i < files.length; i++) {
const file = files[i];
const formData = new FormData();
formData.append("file", file);
try {
const res = await fetch("/api/upload", {
method: "POST",
body: formData,
});
const data = await res.json();
if (data.url) {
newImages.push(data.url);
}
} catch (err) {
console.error("Upload failed:", err);
}
}
setUploadedImages([...uploadedImages, ...newImages]);
setUploading(false);
};
return (
<div className="min-h-screen bg-slate-950 p-8">
<div className="max-w-4xl mx-auto">
<h1 className="text-2xl font-bold text-white mb-6">📤 Upload Resume Images</h1>
<p className="text-slate-400 mb-6">Upload images of your resume design to let Horus analyze and recreate it.</p>
<div className="border-2 border-dashed border-slate-600 rounded-xl p-12 text-center hover:border-slate-500 transition-colors">
<input
type="file"
accept="image/*"
multiple
onChange={handleUpload}
className="hidden"
id="file-upload"
/>
<label htmlFor="file-upload" className="cursor-pointer">
<div className="text-6xl mb-4">📁</div>
<div className="text-white text-lg mb-2">Click to upload images</div>
<div className="text-slate-500 text-sm">PNG, JPG, GIF up to 10MB</div>
</label>
</div>
{uploading && (
<div className="mt-6 text-center text-slate-400">Uploading...</div>
)}
{uploadedImages.length > 0 && (
<div className="mt-8">
<h2 className="text-white font-bold mb-4">Uploaded Images:</h2>
<div className="space-y-4">
{uploadedImages.map((url, i) => (
<div key={i} className="bg-slate-800 rounded-lg p-4">
<div className="text-slate-400 text-sm mb-2">Image {i + 1}</div>
<div className="bg-slate-700 rounded p-2 text-slate-300 text-sm font-mono break-all">{url}</div>
</div>
))}
</div>
</div>
)}
</div>
</div>
);
}