new landing page

This commit is contained in:
Michael Beck 2025-06-11 23:54:17 +02:00
parent 70e2e2e900
commit ce6bc03b46

View File

@ -7,78 +7,140 @@
{% block content %}
<!-- Include flash messages template -->
{% include "partials/flash_messages.html.jinja" %}
<div class="container text-center">
<div class="container text-center mb-5">
<h1 class="display-4">Welcome to SciPaperLoader</h1>
<p class="lead">Your paper scraping tool is ready.</p>
<p class="text-muted">A simple tool to scrape papers from Zotero API.</p>
<p class="lead">Your comprehensive paper management and scraping platform</p>
<p class="text-muted">Automate paper collection, manage metadata, and monitor download progress with intelligent
scheduling</p>
</div>
<div class="row g-4">
<div class="col-md-6">
<div class="card shadow-sm">
<!-- Main Features Section -->
<div class="row g-4 mb-5">
<div class="col-12">
<h2 class="text-center mb-4">🚀 Core Features</h2>
</div>
<div class="col-lg-4 col-md-6">
<div class="card shadow-sm h-100">
<div class="card-body">
<h5 class="card-title">📄 CSV Import</h5>
<h5 class="card-title">🎛️ Scraper Control Panel</h5>
<p class="card-text">
Upload a 37-column CSV to import paper metadata. Only relevant fields
(title, DOI, ISSN, etc.) are stored. Errors are reported without
aborting the batch.
Start, pause, and monitor the automated paper scraping process. View real-time statistics,
activity charts, and process individual papers on demand.
</p>
<a href="{{ url_for('upload.upload') }}" class="btn btn-sm btn-outline-primary">Upload Now</a>
<a href="{{ url_for('scraper.index') }}" class="btn btn-primary">Open Control Panel</a>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">🧠 Background Scraper</h5>
<p class="card-text">
A daemon process runs hourly to fetch papers using Zotero API.
Downloads are randomized to mimic human behavior and avoid detection.
</p>
<a href="{{ url_for('logger.list_logs') }}" class="btn btn-sm btn-outline-secondary">View Logs</a>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card shadow-sm">
<div class="col-lg-4 col-md-6">
<div class="card shadow-sm h-100">
<div class="card-body">
<h5 class="card-title">📚 Paper Management</h5>
<p class="card-text">
Monitor paper status (Pending, Done, Failed), download PDFs, and
inspect errors. Files are stored on disk in structured folders per
DOI.
Browse, search, and manage your paper collection. View download status,
inspect metadata, export data, and handle failed downloads.
</p>
<a href="{{ url_for('papers.list_papers') }}" class="btn btn-sm btn-outline-success">Browse Papers</a>
<a href="{{ url_for('papers.list_papers') }}" class="btn btn-success">Browse Papers</a>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card shadow-sm">
<div class="col-lg-4 col-md-6">
<div class="card shadow-sm h-100">
<div class="card-body">
<h5 class="card-title">🕒 Download Schedule</h5>
<h5 class="card-title">📄 CSV Data Import</h5>
<p class="card-text">
Control how many papers are downloaded per hour. Configure hourly
volume (e.g. 2/hour at daytime, 0 at night) to match your bandwidth or
usage pattern.
Bulk import paper metadata from CSV files. Supports 37-column format with
intelligent duplicate detection and comprehensive error reporting.
</p>
<a href="{{ url_for('config.schedule') }}" class="btn btn-sm btn-outline-warning">Adjust Schedule</a>
<a href="{{ url_for('upload.upload') }}" class="btn btn-outline-primary">Import Data</a>
</div>
</div>
</div>
</div>
<!-- Configuration & Monitoring Section -->
<div class="row g-4 mb-5">
<div class="col-12">
<h2 class="text-center mb-4">⚙️ Configuration & Monitoring</h2>
</div>
<div class="col-lg-4 col-md-6">
<div class="card shadow-sm h-100">
<div class="card-body">
<h5 class="card-title">🕒 Download Scheduling</h5>
<p class="card-text">
Configure hourly download quotas and timing patterns. Set different rates for
day/night hours to optimize bandwidth usage and avoid detection.
</p>
<a href="{{ url_for('config.schedule') }}" class="btn btn-warning">Manage Schedule</a>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="card shadow-sm h-100">
<div class="card-body">
<h5 class="card-title">🔧 System Configuration</h5>
<p class="card-text">
Adjust global settings including daily volume limits, download paths,
and scraper module selection for optimal performance.
</p>
<a href="{{ url_for('config.general') }}" class="btn btn-outline-secondary">System Settings</a>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="card shadow-sm h-100">
<div class="card-body">
<h5 class="card-title">📊 Activity Logs</h5>
<p class="card-text">
Monitor system activity, track scraping progress, and troubleshoot issues
with comprehensive logging and activity timeline views.
</p>
<a href="{{ url_for('logger.list_logs') }}" class="btn btn-info">View Logs</a>
</div>
</div>
</div>
</div>
<!-- Advanced Features Section -->
<div class="row g-4 mb-5">
<div class="col-12">
<h2 class="text-center mb-4">🔬 Advanced Features</h2>
</div>
<div class="col-lg-6 col-md-6">
<div class="card shadow-sm h-100">
<div class="card-body">
<h5 class="card-title">🗄️ Database Management</h5>
<p class="card-text">
Manage your paper database with tools for generating test data,
cleaning up records, and database maintenance operations.
</p>
<a href="{{ url_for('config.database') }}" class="btn btn-outline-danger">Database Tools</a>
</div>
</div>
</div>
<div class="col-lg-6 col-md-6">
<div class="card shadow-sm h-100">
<div class="card-body">
<h5 class="card-title">🧠 Intelligent Processing</h5>
<p class="card-text">
Background daemon with randomized timing, human-like behavior patterns,
and automatic retry mechanisms for robust paper collection.
</p>
<div class="mt-3">
<span class="badge bg-success me-2">Auto-Retry</span>
<span class="badge bg-info me-2">Smart Timing</span>
<span class="badge bg-warning">Rate Limiting</span>
</div>
</div>
</div>
</div>
</div>
<script>
function testMultipleMessages() {
showFlashMessage('First message - Success!', 'success');
setTimeout(() => showFlashMessage('Second message - Warning!', 'warning'), 500);
setTimeout(() => showFlashMessage('Third message - Info!', 'info'), 1000);
setTimeout(() => showFlashMessage('Fourth message - Error!', 'error'), 1500);
}
</script>
{% endblock content %}