diff --git a/public/logo.jpg b/public/logo.jpg
new file mode 100644
index 0000000..8751ed9
Binary files /dev/null and b/public/logo.jpg differ
diff --git a/src/actions/auth.tsx b/src/actions/auth.tsx
deleted file mode 100644
index 13459ed..0000000
--- a/src/actions/auth.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-"use server";
-import { cookies } from "next/headers";
-
-import axiosInstance from "../utils/axiosInstance";
-
-export const loginIn = async (username: string, password: string) => {
- try {
- const response = await axiosInstance.post("/api/accounts/token/", {
- username,
- password
- });
- console.log("Login response:", response.data);
-
- const cookieStore = await cookies();
-
- cookieStore.set("accessToken", response.data.access, {
- httpOnly: true,
- maxAge: 60 * 10,
- secure: process.env.NODE_ENV === "production",
- sameSite: "lax"
- });
-
- cookieStore.set("refreshToken", response.data.refresh, {
- httpOnly: true,
- maxAge: 60 * 60 * 24 * 7, // 7 days
- secure: process.env.NODE_ENV === "production",
- sameSite: "lax"
- });
-
- return { success: true, data: response.data };
- } catch (error) {
- console.error("Login error:", error);
- throw error;
- }
-};
-
-
-export const refreshAuth = async () => {
- try {
- const response = await axiosInstance.post("/api/accounts/token/refresh/", {
- withCredentials: true
- });
-
- const cookieStore = await cookies();
-
- cookieStore.set("accessToken", response.data.access, {
- httpOnly: true,
- secure: process.env.NODE_ENV === "production",
- maxAge: 60 * 10,
- sameSite: "lax"
- });
-
- return { success: true };
- } catch (error) {
- console.error("Refresh auth error:", error);
- throw error;
- }
-};
diff --git a/src/app/auth/forgot-password/page.tsx b/src/app/auth/forgot-password/page.tsx
deleted file mode 100644
index e51cd9e..0000000
--- a/src/app/auth/forgot-password/page.tsx
+++ /dev/null
@@ -1,137 +0,0 @@
-"use client"
-
-import type React from "react"
-import { useState } from "react"
-import { ArrowLeft, Mail } from "lucide-react"
-import Link from "next/link"
-import { Button } from "@/src/components/ui/button"
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/src/components/ui/card"
-import { Input } from "@/src/components/ui/input"
-import { Label } from "@/src/components/ui/label"
-import { Database } from "lucide-react"
-import toast from "react-hot-toast"
-
-
-export default function ForgotPasswordPage() {
- const [email, setEmail] = useState("")
- const [isSubmitted, setIsSubmitted] = useState(false)
- const [isLoading, setIsLoading] = useState(false)
-
- const handleSubmit = async (e: React.FormEvent) => {
- e.preventDefault()
- if (!email) return
-
- setIsLoading(true)
-
- // Simulate API call
- setTimeout(() => {
- setIsLoading(false)
- setIsSubmitted(true)
- }, 1500)
- }
-
- return (
-
- {/* Header */}
-
-
-
-
-
-
-
- Back to Dataset
-
-
-
-
VetDataHub
-
-
-
-
-
-
-
-
-
-
-
-
Upload New Version
-
-
Add a new version to: {mockCurrentDataset.title}
-
- Current: v{mockCurrentDataset.currentVersion}
- Next: v{getNextVersion()}
-
-
-
- {/* Progress Steps */}
-
-
- {steps.map((step, index) => (
-
-
= step.number
- ? 'bg-green-600 border-green-600 text-white'
- : 'border-gray-300 text-gray-500'
- }`}>
- {currentStep > step.number ? (
-
- ) : (
- step.number
- )}
-
- {index < steps.length - 1 && (
-
step.number ? 'bg-green-600' : 'bg-gray-300'
- }`} />
- )}
-
- ))}
-
-
- {steps.map((step) => (
-
-
{step.title}
-
{step.description}
-
- ))}
-
-
-
- {/* Step 1: Version Type */}
- {currentStep === 1 && (
-
-
- Choose Version Type
- Select the appropriate version increment based on your changes
-
-
-
-
-
- VetDataHub uses semantic versioning (MAJOR.MINOR.PATCH) to track dataset changes.
-
-
-
-
-
-
-
-
-
- Major Version ({mockCurrentDataset.currentVersion.split('.')[0] + 1}.0.0)
-
-
- Breaking changes that make the dataset incompatible with previous versions.
-
-
- Examples: Column renames, file format changes, schema modifications
-
-
-
-
-
-
-
-
- Minor Version ({mockCurrentDataset.currentVersion.split('.')[0]}.{parseInt(mockCurrentDataset.currentVersion.split('.')[1]) + 1}.0)
-
-
- Backward-compatible additions and improvements.
-
-
- Examples: New columns, additional data, new metadata fields
-
-
-
-
-
-
-
-
- Patch Version ({mockCurrentDataset.currentVersion.split('.')[0]}.{mockCurrentDataset.currentVersion.split('.')[1]}.{parseInt(mockCurrentDataset.currentVersion.split('.')[2]) + 1})
-
-
- Bug fixes and corrections without functional changes.
-
-
- Examples: Data corrections, metadata fixes, typo corrections
-
-
-
-
-
-
-
-
Selected Version: v{getNextVersion()}
-
- This will create a new {versionType} version of your dataset.
-
-
-
-
- setCurrentStep(2)}>
- Next: File Upload
-
-
-
-
- )}
-
- {/* Step 2: File Upload */}
- {currentStep === 2 && (
-
-
- Upload New Dataset Version
- Upload the updated dataset files
-
-
- {/* Current Version Info */}
-
-
Current Version (v{mockCurrentDataset.currentVersion})
-
-
- Size: {mockCurrentDataset.size}
-
-
- Format: {mockCurrentDataset.format}
-
-
- Last Updated: {mockCurrentDataset.lastUpdated}
-
-
-
-
-
-
-
- Upload the new version of your dataset. The system will automatically detect changes and calculate checksums.
-
-
-
- {!isUploading && uploadProgress === 0 && (
-
-
-
Upload New Version
-
Drag and drop the updated files here, or click to browse
-
- Select Files
-
-
- )}
-
- {isUploading && (
-
-
-
-
-
canine_orthopedic_data_v{getNextVersion()}.csv
-
2.8 GB (+500 MB from previous version)
-
-
-
-
- Uploading and analyzing changes... {uploadProgress}%
-
-
- )}
-
- {uploadProgress === 100 && !isUploading && (
-
-
-
-
- File uploaded successfully! Changes detected and verified.
-
-
-
-
-
-
- File Comparison
-
-
-
- Previous Size:
- 2.3 GB
-
-
- New Size:
- 2.8 GB
-
-
- Size Change:
- +500 MB (+21.7%)
-
-
-
- Checksum:
- Verified
-
-
-
-
-
-
- Detected Changes
-
-
-
-
-
+2,500 new records added
-
-
-
-
3 new columns detected
-
-
-
-
15 data corrections applied
-
-
-
-
-
-
- )}
-
-
- setCurrentStep(1)}>
- Previous
-
- setCurrentStep(3)}
- disabled={uploadProgress !== 100}
- >
- Next: Document Changes
-
-
-
-
- )}
-
- {/* Step 3: Changes Documentation */}
- {currentStep === 3 && (
-
-
- Document Changes
- Provide detailed information about what has changed in this version
-
-
-
-
Changes Summary *
-
handleInputChange('changesSummary', e.target.value)}
- />
-
This will appear in the version history
-
-
-
- Detailed Changes
-
-
-
-
-
-
- New Features/Additions
-
-
- Bug Fixes/Corrections
-
-
-
-
-
- Data Additions
-
-
- Methodology Changes
-
-
-
- {versionType === "major" && (
-
-
-
- Major Version Notice: Since this is a major version update, please clearly document any breaking changes that might affect users of the previous version.
-
-
- )}
-
-
- setCurrentStep(2)}>
- Previous
-
- setCurrentStep(4)}>
- Next: Review
-
-
-
-
- )}
-
- {/* Step 4: Review & Publish */}
- {currentStep === 4 && (
-
-
- Review New Version
- Review the new version details before publishing
-
-
-
-
-
- Your new dataset version is ready to publish! This will create version {getNextVersion()} and notify existing users.
-
-
-
-
-
-
- Version Information
-
-
- Previous Version: v{mockCurrentDataset.currentVersion}
- New Version: v{getNextVersion()}
- Version Type: {versionType.charAt(0).toUpperCase() + versionType.slice(1)}
- File Size: 2.8 GB (+500 MB)
- Records Added: +2,500
-
-
-
-
-
- Changes Summary
-
-
- Summary: {formData.changesSummary || "Added 2,500 new cases from 2024 data collection"}
- New Features: {formData.newFeatures || "3 new outcome measurement columns"}
- Bug Fixes: {formData.bugFixes || "15 data corrections applied"}
-
-
-
-
-
-
- Impact Assessment
-
-
-
-
- Backward Compatibility
-
- {versionType === "major" ? "Breaking Changes" : "Compatible"}
-
-
-
- User Notifications
-
- 234 subscribers will be notified
-
-
-
- DOI Assignment
-
- New DOI will be generated
-
-
-
-
-
-
-
- setCurrentStep(3)}>
- Previous
-
-
- Publish Version {getNextVersion()}
-
-
-
-
- )}
-
-
-
- )
-}
diff --git a/src/app/datasets/[id]/page.tsx b/src/app/datasets/[id]/page.tsx
deleted file mode 100644
index 527887a..0000000
--- a/src/app/datasets/[id]/page.tsx
+++ /dev/null
@@ -1,525 +0,0 @@
-"use client"
-
-import { useState } from "react"
-import { ArrowLeft, Download, Star, Calendar, MapPin, Tag, MessageSquare, Share2, Heart, Flag, Upload } from 'lucide-react'
-import Link from "next/link"
-import { Button } from "@/src/components/ui/button"
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/src/components/ui/card"
-import { Badge } from "@/src/components/ui/badge"
-import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/src/components/ui/tabs"
-import { Avatar, AvatarFallback, AvatarImage } from "@/src/components/ui/avatar"
-import { Textarea } from "@/src/components/ui/textarea"
-import { Separator } from "@/src/components/ui/separator"
-import { Progress } from "@/src/components/ui/progress"
-
-const mockDataset = {
- id: "1",
- title: "Canine Orthopedic Conditions Survey",
- description: "Comprehensive dataset of 15,000 cases covering common orthopedic conditions in dogs across North America. This longitudinal study includes diagnostic imaging, treatment outcomes, and follow-up data spanning 5 years. The dataset contains detailed information about patient demographics, clinical presentations, diagnostic procedures, treatment protocols, and long-term outcomes.",
- contributors: [
- { name: "Dr. Sarah Chen", avatar: "/placeholder.svg?height=40&width=40", role: "Principal Investigator" },
- { name: "Dr. Michael Torres", avatar: "/placeholder.svg?height=40&width=40", role: "Co-Investigator" }
- ],
- species: "Dog",
- category: "Clinical Trials",
- location: "North America",
- dateRange: "2019-2024",
- rating: 4.8,
- downloads: 1234,
- size: "2.3 GB",
- format: "CSV",
- license: "CC-BY-4.0",
- version: "1.2.0",
- doi: "10.5281/zenodo.1234567",
- checksum: "sha256:a1b2c3d4e5f6...",
- sampleSize: 15000,
- fundingSource: "National Science Foundation, Grant #12345",
- ethicsApproval: "University IRB #2019-001",
- methodology: "Multi-center prospective cohort study involving 25 veterinary hospitals across the United States and Canada.",
- relatedPublications: ["10.1016/j.tvjl.2023.105123", "10.1111/vsu.13456"]
-}
-
-const mockDiscussions = [
- {
- id: 1,
- author: "Dr. Elena Rossi",
- avatar: "/placeholder.svg?height=32&width=32",
- timestamp: "2 hours ago",
- content: "This is an excellent dataset! I'm particularly interested in the follow-up data. Could you provide more details about the criteria used for long-term outcome assessment?",
- replies: 3
- },
- {
- id: 2,
- author: "Sarah Boateng",
- avatar: "/placeholder.svg?height=32&width=32",
- timestamp: "1 day ago",
- content: "As a veterinary student, I found this dataset incredibly valuable for my capstone project. The documentation is thorough and well-organized. Thank you for sharing!",
- replies: 1
- }
-]
-
-const mockReviews = [
- {
- id: 1,
- author: "Dr. Lucas Thorne",
- avatar: "/placeholder.svg?height=32&width=32",
- rating: 5,
- timestamp: "1 week ago",
- content: "Outstanding dataset with comprehensive metadata. The data quality is exceptional and the documentation makes it easy to understand and use. Highly recommended for orthopedic research.",
- helpful: 12
- },
- {
- id: 2,
- author: "Dr. Amina Mensah",
- avatar: "/placeholder.svg?height=32&width=32",
- rating: 4,
- timestamp: "2 weeks ago",
- content: "Very useful dataset for comparative studies. The sample size is impressive and the geographic coverage is good. Would love to see similar data from other regions.",
- helpful: 8
- }
-]
-
-const mockVersions = [
- {
- version: "1.2.0",
- date: "2024-01-15",
- author: "Dr. Sarah Chen",
- changes: "Added 2,000 new cases from 2024 data collection period. Updated metadata with additional outcome measures.",
- size: "2.3 GB"
- },
- {
- version: "1.1.0",
- date: "2023-08-20",
- author: "Dr. Michael Torres",
- changes: "Included imaging data for 80% of cases. Added new variables for treatment response assessment.",
- size: "2.1 GB"
- },
- {
- version: "1.0.0",
- date: "2023-03-10",
- author: "Dr. Sarah Chen",
- changes: "Initial release with 10,000 cases from 2019-2022 data collection.",
- size: "1.8 GB"
- }
-]
-
-export default function DatasetDetailPage() {
- const [newComment, setNewComment] = useState("")
- const [userRating, setUserRating] = useState(0)
-
- return (
-
- {/* Header */}
-
-
-
-
-
-
-
- Back to Datasets
-
-
-
-
VetDataHub
-
-
-
-
-
- Share
-
-
-
- Save
-
-
-
- Download
-
-
-
-
-
-
-
-
- {/* Main Content */}
-
-
-
-
-
-
{mockDataset.title}
-
-
- {mockDataset.contributors.map((contributor, index) => (
-
-
-
- {contributor.name.split(' ').map(n => n[0]).join('')}
-
-
-
{contributor.name}
-
{contributor.role}
-
-
- ))}
-
-
-
- {mockDataset.rating}
- (24 reviews)
-
-
-
-
v{mockDataset.version}
-
-
-
-
- {mockDataset.description}
-
-
-
- {mockDataset.species}
- {mockDataset.category}
- {mockDataset.format}
- {mockDataset.license}
-
-
-
-
-
- {mockDataset.location}
-
-
-
- {mockDataset.dateRange}
-
-
-
- {mockDataset.downloads} downloads
-
-
-
- {mockDataset.size}
-
-
-
-
-
- {/* Tabs */}
-
-
- Overview
- Discussions
- Reviews
- Versions
-
-
-
-
-
- Dataset Details
-
-
-
-
Methodology
-
{mockDataset.methodology}
-
-
-
-
-
Sample Size
-
{mockDataset.sampleSize.toLocaleString()} cases
-
-
-
Funding Source
-
{mockDataset.fundingSource}
-
-
-
Ethics Approval
-
{mockDataset.ethicsApproval}
-
-
-
DOI
-
{mockDataset.doi}
-
-
-
-
-
Related Publications
-
- {mockDataset.relatedPublications.map((pub, index) => (
-
-
- {pub}
-
-
- ))}
-
-
-
-
-
-
-
-
-
- Discussions
- Ask questions and discuss this dataset with the community
-
-
-
-
-
-
- {mockDiscussions.map((discussion) => (
-
-
-
-
- {discussion.author.split(' ').map(n => n[0]).join('')}
-
-
-
- {discussion.author}
- {discussion.timestamp}
-
-
{discussion.content}
-
-
-
- Reply ({discussion.replies})
-
-
-
- Like
-
-
-
-
-
- ))}
-
-
-
-
-
-
-
-
- Reviews & Ratings
- See what the community thinks about this dataset
-
-
-
-
Rate this dataset
-
- {[1, 2, 3, 4, 5].map((star) => (
- setUserRating(star)}
- className={`h-6 w-6 ${star <= userRating ? 'text-yellow-400 fill-current' : 'text-gray-300'}`}
- >
-
-
- ))}
-
-
-
Submit Review
-
-
-
- {mockReviews.map((review) => (
-
-
-
-
- {review.author.split(' ').map(n => n[0]).join('')}
-
-
-
-
{review.author}
-
- {[1, 2, 3, 4, 5].map((star) => (
-
- ))}
-
-
{review.timestamp}
-
-
{review.content}
-
-
-
- Helpful ({review.helpful})
-
-
-
- Report
-
-
-
-
-
- ))}
-
-
-
-
-
-
-
-
-
-
- Version History
- Track changes and updates to this dataset
-
-
-
-
- Upload New Version
-
-
-
-
-
-
- {mockVersions.map((version, index) => (
-
-
-
- v{version.version}
-
-
-
-
- {version.author}
- {version.date}
- • {version.size}
-
-
{version.changes}
-
-
- {index > 0 && (
-
- Compare
-
- )}
-
-
- Download
-
-
-
- ))}
-
-
-
-
-
-
-
- {/* Sidebar */}
-
- {/* Download Card */}
-
-
- Download Dataset
-
-
-
-
{mockDataset.size}
-
Total size
-
-
-
- Download Latest Version
-
-
- By downloading, you agree to the {mockDataset.license} license
-
-
-
-
- {/* Stats Card */}
-
-
- Dataset Statistics
-
-
-
- Downloads
- {mockDataset.downloads.toLocaleString()}
-
-
- Views
- 5,678
-
-
- Citations
- 23
-
-
- Forks
- 7
-
-
-
-
- {/* Rating Breakdown */}
-
-
- Rating Breakdown
-
-
- {[5, 4, 3, 2, 1].map((stars) => (
-
-
{stars}★
-
-
{stars === 5 ? 17 : stars === 4 ? 6 : 1}
-
- ))}
-
-
-
- {/* Related Datasets */}
-
-
- Related Datasets
-
-
- {[
- { title: "Feline Orthopedic Cases", rating: 4.6 },
- { title: "Equine Lameness Study", rating: 4.4 },
- { title: "Small Animal Surgery Outcomes", rating: 4.7 }
- ].map((dataset, index) => (
-
-
-
{dataset.title}
-
-
- {dataset.rating}
-
-
-
- ))}
-
-
-
-
-
-
- )
-}
diff --git a/src/app/datasets/page.tsx b/src/app/datasets/page.tsx
deleted file mode 100644
index 32b7e12..0000000
--- a/src/app/datasets/page.tsx
+++ /dev/null
@@ -1,302 +0,0 @@
-"use client"
-
-import { useState } from "react"
-import { Search, Filter, Calendar, MapPin, Users, FileText, Star } from 'lucide-react'
-import Link from "next/link"
-import { Button } from "@/src/components/ui/button"
-import { Input } from "@/src/components/ui/input"
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/src/components/ui/card"
-import { Badge } from "@/src/components/ui/badge"
-import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/src/components/ui/select"
-import { Checkbox } from "@/src/components/ui/checkbox"
-import { Label } from "@/src/components/ui/label"
-import { Separator } from "@/src/components/ui/separator"
-import { Slider } from "@/src/components/ui/slider"
-import Header from "@/src/components/header"
-
-export default function AdvancedSearchPage() {
- const [searchQuery, setSearchQuery] = useState("")
- const [dateRange, setDateRange] = useState([2020, 2024])
- const [sampleSizeRange, setSampleSizeRange] = useState([100, 50000])
-
- return (
-
- {/* Header */}
-
-
-
-
-
-
Advanced Search
-
Build complex queries to find exactly what you're looking for
-
-
-
- {/* Search Filters */}
-
-
-
-
-
- Search Filters
-
-
-
- {/* Keywords */}
-
- Keywords
- setSearchQuery(e.target.value)}
- />
-
-
-
-
- {/* Species */}
-
-
Species
-
- {["Dog", "Cat", "Cattle", "Equine", "Poultry", "Wildlife", "Other"].map((species) => (
-
-
- {species}
-
- ))}
-
-
-
-
-
- {/* Category */}
-
-
Category
-
- {["Clinical Trials", "Epidemiology", "Genomics", "Imaging", "Pathology"].map((category) => (
-
-
- {category}
-
- ))}
-
-
-
-
-
- {/* Date Range */}
-
-
Data Collection Period
-
-
-
-
-
- {dateRange[0]}
- {dateRange[1]}
-
-
-
-
-
-
- {/* Sample Size */}
-
-
Sample Size
-
-
-
-
-
- {sampleSizeRange[0].toLocaleString()}
- {sampleSizeRange[1].toLocaleString()}
-
-
-
-
-
-
- {/* Location */}
-
- Location
-
-
-
-
-
- North America
- Europe
- Asia
- Africa
- Oceania
- South America
-
-
-
-
-
-
- {/* File Format */}
-
- File Format
-
-
-
-
-
- CSV
- JSON
- Parquet
- Excel
- NetCDF
-
-
-
-
-
-
- {/* License */}
-
- License
-
-
-
-
-
- CC-BY-4.0
- CC0
- GPL-3.0
- Proprietary
-
-
-
-
-
-
- Search Datasets
-
-
-
-
-
- {/* Search Results */}
-
-
-
-
- Found 42 datasets matching your criteria
-
-
-
-
-
-
- Most Relevant
- Newest First
- Highest Rated
- Most Downloaded
-
-
-
-
-
- {/* Search Results */}
-
- {[1, 2, 3].map((i) => (
-
-
-
-
-
-
- Canine Orthopedic Conditions Survey {i}
-
-
-
-
-
- Dr. Sarah Chen, Dr. Michael Torres
-
-
-
- 4.8
-
-
-
-
v1.2.0
-
-
-
-
- Comprehensive dataset of 15,000 cases covering common orthopedic conditions in dogs across North America.
- This longitudinal study includes diagnostic imaging, treatment outcomes, and follow-up data spanning 5 years.
-
-
-
- Dog
- Clinical Trials
- CSV
- CC-BY-4.0
-
-
-
-
-
- North America
-
-
-
- 2019-2024
-
-
-
- 15,000 cases
-
-
-
- 2.3 GB
-
-
-
-
-
- View Details
-
-
- 1,234 downloads • Updated Jan 15, 2024
-
-
-
-
- ))}
-
-
- {/* Pagination */}
-
- Previous
- 1
- 2
- 3
- Next
-
-
-
-
-
-
- )
-}
diff --git a/src/app/datasets/upload/page.tsx b/src/app/datasets/upload/page.tsx
deleted file mode 100644
index 2cc98b7..0000000
--- a/src/app/datasets/upload/page.tsx
+++ /dev/null
@@ -1,501 +0,0 @@
-"use client"
-
-import { useState } from "react"
-import { ArrowLeft, Upload, FileText, AlertCircle, CheckCircle } from 'lucide-react'
-import Link from "next/link"
-import { Button } from "@/src/components/ui/button"
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/src/components/ui/card"
-import { Input } from "@/src/components/ui/input"
-import { Label } from "@/src/components/ui/label"
-import { Textarea } from "@/src/components/ui/textarea"
-import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/src/components/ui/select"
-import { Checkbox } from "@/src/components/ui/checkbox"
-import { Progress } from "@/src/components/ui/progress"
-import { Alert, AlertDescription } from "@/src/components/ui/alert"
-import { Badge } from "@/src/components/ui/badge"
-
-export default function UploadPage() {
- const [currentStep, setCurrentStep] = useState(1)
- const [uploadProgress, setUploadProgress] = useState(0)
- const [isUploading, setIsUploading] = useState(false)
- const [formData, setFormData] = useState({
- title: "",
- description: "",
- species: "",
- category: "",
- license: "",
- location: "",
- startDate: "",
- endDate: "",
- sampleSize: "",
- fundingSource: "",
- ethicsApproval: "",
- methodology: "",
- contactEmail: "",
- keywords: ""
- })
-
- const handleInputChange = (field: string, value: string) => {
- setFormData(prev => ({ ...prev, [field]: value }))
- }
-
- const handleFileUpload = () => {
- setIsUploading(true)
- // Simulate file upload progress
- const interval = setInterval(() => {
- setUploadProgress(prev => {
- if (prev >= 100) {
- clearInterval(interval)
- setIsUploading(false)
- setCurrentStep(4)
- return 100
- }
- return prev + 10
- })
- }, 200)
- }
-
- const steps = [
- { number: 1, title: "Dataset Information", description: "Basic details about your dataset" },
- { number: 2, title: "File Upload", description: "Upload your dataset files" },
- { number: 3, title: "Metadata", description: "Additional information and documentation" },
- { number: 4, title: "Review & Publish", description: "Review and publish your dataset" }
- ]
-
- return (
-
- {/* Header */}
-
-
-
-
-
-
-
- Back to Datasets
-
-
-
-
VetDataHub
-
-
-
-
-
-
-
-
-
-
Upload Dataset
-
Share your veterinary research data with the global community
-
-
- {/* Progress Steps */}
-
-
- {steps.map((step, index) => (
-
-
= step.number
- ? 'bg-green-600 border-green-600 text-white'
- : 'border-gray-300 text-gray-500'
- }`}>
- {currentStep > step.number ? (
-
- ) : (
- step.number
- )}
-
- {index < steps.length - 1 && (
-
step.number ? 'bg-green-600' : 'bg-gray-300'
- }`} />
- )}
-
- ))}
-
-
- {steps.map((step) => (
-
-
{step.title}
-
{step.description}
-
- ))}
-
-
-
- {/* Step 1: Dataset Information */}
- {currentStep === 1 && (
-
-
- Dataset Information
- Provide basic information about your dataset
-
-
-
-
- Dataset Title *
- handleInputChange('title', e.target.value)}
- />
-
-
- Primary Species *
- handleInputChange('species', value)}>
-
-
-
-
- Dog
- Cat
- Cattle
- Equine
- Poultry
- Wildlife
- Other
-
-
-
-
-
-
- Description *
-
-
-
-
- Category *
- handleInputChange('category', value)}>
-
-
-
-
- Clinical Trials
- Epidemiology
- Genomics
- Imaging
- Pathology
- Other
-
-
-
-
- License *
- handleInputChange('license', value)}>
-
-
-
-
- CC-BY-4.0
- CC0
- GPL-3.0
- Proprietary
- Other
-
-
-
-
-
-
-
-
-
-
-
Keywords
-
handleInputChange('keywords', e.target.value)}
- />
-
Use keywords to help others discover your dataset
-
-
-
- setCurrentStep(2)}>
- Next: File Upload
-
-
-
-
- )}
-
- {/* Step 2: File Upload */}
- {currentStep === 2 && (
-
-
- File Upload
- Upload your dataset files (max 20GB per file)
-
-
-
-
-
- Supported formats: CSV, JSON, Parquet, Excel (.xlsx), NetCDF. Files larger than 2GB will use resumable upload.
-
-
-
- {!isUploading && uploadProgress === 0 && (
-
-
-
Upload your dataset files
-
Drag and drop files here, or click to browse
-
- Select Files
-
-
- )}
-
- {isUploading && (
-
-
-
-
-
canine_orthopedic_data.csv
-
2.3 GB
-
-
-
-
- Uploading... {uploadProgress}%
-
-
- )}
-
- {uploadProgress === 100 && !isUploading && (
-
-
-
-
- File uploaded successfully! Checksum verified.
-
-
-
-
-
-
canine_orthopedic_data.csv
-
2.3 GB • SHA-256: a1b2c3d4e5f6...
-
-
- Verified
-
-
-
- )}
-
-
- setCurrentStep(1)}>
- Previous
-
- setCurrentStep(3)}
- disabled={uploadProgress !== 100}
- >
- Next: Metadata
-
-
-
-
- )}
-
- {/* Step 3: Metadata */}
- {currentStep === 3 && (
-
-
- Additional Metadata
- Provide additional information to help others understand and use your dataset
-
-
-
- Methodology
-
-
-
-
-
-
Contact Email
-
handleInputChange('contactEmail', e.target.value)}
- />
-
For dataset-specific inquiries
-
-
-
-
Data Sensitivity Level
-
-
-
- Public - No restrictions
-
-
-
- Restricted - Requires approval
-
-
-
- Confidential - Limited access
-
-
-
-
-
- setCurrentStep(2)}>
- Previous
-
- setCurrentStep(4)}>
- Next: Review
-
-
-
-
- )}
-
- {/* Step 4: Review & Publish */}
- {currentStep === 4 && (
-
-
- Review & Publish
- Review your dataset information before publishing
-
-
-
-
-
- Your dataset is ready to publish! Once published, it will be assigned a DOI and become publicly available.
-
-
-
-
-
-
Dataset Information
-
-
Title: {formData.title || "Canine Orthopedic Conditions Survey"}
-
Species: {formData.species || "Dog"}
-
Category: {formData.category || "Clinical Trials"}
-
License: {formData.license || "CC-BY-4.0"}
-
Location: {formData.location || "North America"}
-
Sample Size: {formData.sampleSize || "15,000"} cases
-
-
-
-
File Information
-
-
File: canine_orthopedic_data.csv
-
Size: 2.3 GB
-
Format: CSV
-
Checksum: Verified
-
Version: 1.0.0
-
-
-
-
-
-
-
-
- I agree to the Terms of Service (Coming Soon) and confirm that I have the right to share this data
-
-
-
-
-
- I confirm that this dataset will be made available under the selected license
-
-
-
-
-
- setCurrentStep(3)}>
- Previous
-
-
- Publish Dataset
-
-
-
-
- )}
-
-
-
- )
-}
diff --git a/src/app/globals.css b/src/app/globals.css
index 02687bd..0ff1b6e 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1,123 +1,19 @@
@import 'tailwindcss';
-@import 'tw-animate-css';
-@custom-variant dark (&:is(.dark *));
-:root {
- --background: oklch(1 0 0);
- --foreground: oklch(0.145 0 0);
- --card: oklch(1 0 0);
- --card-foreground: oklch(0.145 0 0);
- --popover: oklch(1 0 0);
- --popover-foreground: oklch(0.145 0 0);
- --primary: oklch(0.205 0 0);
- --primary-foreground: oklch(0.985 0 0);
- --secondary: oklch(0.97 0 0);
- --secondary-foreground: oklch(0.205 0 0);
- --muted: oklch(0.97 0 0);
- --muted-foreground: oklch(0.556 0 0);
- --accent: oklch(0.97 0 0);
- --accent-foreground: oklch(0.205 0 0);
- --destructive: oklch(0.577 0.245 27.325);
- --destructive-foreground: oklch(0.577 0.245 27.325);
- --border: oklch(0.922 0 0);
- --input: oklch(0.922 0 0);
- --ring: oklch(0.708 0 0);
- --chart-1: oklch(0.646 0.222 41.116);
- --chart-2: oklch(0.6 0.118 184.704);
- --chart-3: oklch(0.398 0.07 227.392);
- --chart-4: oklch(0.828 0.189 84.429);
- --chart-5: oklch(0.769 0.188 70.08);
- --radius: 0.625rem;
- --sidebar: oklch(0.985 0 0);
- --sidebar-foreground: oklch(0.145 0 0);
- --sidebar-primary: oklch(0.205 0 0);
- --sidebar-primary-foreground: oklch(0.985 0 0);
- --sidebar-accent: oklch(0.97 0 0);
- --sidebar-accent-foreground: oklch(0.205 0 0);
- --sidebar-border: oklch(0.922 0 0);
- --sidebar-ring: oklch(0.708 0 0);
-}
+@theme {
+ --color-primary: #3498db;
+ --color-secondary: #2ecc71;
+ --color-highlight: #f39c12;
+ --color-background-light: #ffffff;
+ --color-background-dark: #101c22;
+ --color-gray-light: #f8f9fa;
-.dark {
- --background: oklch(0.145 0 0);
- --foreground: oklch(0.985 0 0);
- --card: oklch(0.145 0 0);
- --card-foreground: oklch(0.985 0 0);
- --popover: oklch(0.145 0 0);
- --popover-foreground: oklch(0.985 0 0);
- --primary: oklch(0.985 0 0);
- --primary-foreground: oklch(0.205 0 0);
- --secondary: oklch(0.269 0 0);
- --secondary-foreground: oklch(0.985 0 0);
- --muted: oklch(0.269 0 0);
- --muted-foreground: oklch(0.708 0 0);
- --accent: oklch(0.269 0 0);
- --accent-foreground: oklch(0.985 0 0);
- --destructive: oklch(0.396 0.141 25.723);
- --destructive-foreground: oklch(0.637 0.237 25.331);
- --border: oklch(0.269 0 0);
- --input: oklch(0.269 0 0);
- --ring: oklch(0.439 0 0);
- --chart-1: oklch(0.488 0.243 264.376);
- --chart-2: oklch(0.696 0.17 162.48);
- --chart-3: oklch(0.769 0.188 70.08);
- --chart-4: oklch(0.627 0.265 303.9);
- --chart-5: oklch(0.645 0.246 16.439);
- --sidebar: oklch(0.205 0 0);
- --sidebar-foreground: oklch(0.985 0 0);
- --sidebar-primary: oklch(0.488 0.243 264.376);
- --sidebar-primary-foreground: oklch(0.985 0 0);
- --sidebar-accent: oklch(0.269 0 0);
- --sidebar-accent-foreground: oklch(0.985 0 0);
- --sidebar-border: oklch(0.269 0 0);
- --sidebar-ring: oklch(0.439 0 0);
-}
+ --font-display: "Poppins", sans-serif;
+ --font-body: "Inter", sans-serif;
-@theme inline {
- --color-background: var(--background);
- --color-foreground: var(--foreground);
- --color-card: var(--card);
- --color-card-foreground: var(--card-foreground);
- --color-popover: var(--popover);
- --color-popover-foreground: var(--popover-foreground);
- --color-primary: var(--primary);
- --color-primary-foreground: var(--primary-foreground);
- --color-secondary: var(--secondary);
- --color-secondary-foreground: var(--secondary-foreground);
- --color-muted: var(--muted);
- --color-muted-foreground: var(--muted-foreground);
- --color-accent: var(--accent);
- --color-accent-foreground: var(--accent-foreground);
- --color-destructive: var(--destructive);
- --color-destructive-foreground: var(--destructive-foreground);
- --color-border: var(--border);
- --color-input: var(--input);
- --color-ring: var(--ring);
- --color-chart-1: var(--chart-1);
- --color-chart-2: var(--chart-2);
- --color-chart-3: var(--chart-3);
- --color-chart-4: var(--chart-4);
- --color-chart-5: var(--chart-5);
- --radius-sm: calc(var(--radius) - 4px);
- --radius-md: calc(var(--radius) - 2px);
- --radius-lg: var(--radius);
- --radius-xl: calc(var(--radius) + 4px);
- --color-sidebar: var(--sidebar);
- --color-sidebar-foreground: var(--sidebar-foreground);
- --color-sidebar-primary: var(--sidebar-primary);
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
- --color-sidebar-accent: var(--sidebar-accent);
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
- --color-sidebar-border: var(--sidebar-border);
- --color-sidebar-ring: var(--sidebar-ring);
-}
-
-@layer base {
- * {
- @apply border-border outline-ring/50;
- }
- body {
- @apply bg-background text-foreground;
- }
-}
+ --radius: 0.5rem;
+ --radius-lg: 0.75rem;
+ --radius-xl: 1rem;
+ --radius-full: 9999px;
+}
\ No newline at end of file
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 9d70889..37ef03c 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -3,8 +3,7 @@ import { GeistSans } from 'geist/font/sans'
import { GeistMono } from 'geist/font/mono'
import './globals.css'
import {Toaster} from 'react-hot-toast'
-import { SupportButton } from '../components/support-button'
-import AxiosInterceptorWrapper from './axios-interceptor-wrapper'
+
export const metadata: Metadata = {
title: 'VetDataHub',
@@ -26,13 +25,13 @@ html {
--font-mono: ${GeistMono.variable};
}
`}
+
+
+
-
{children}
-
-