Initial commit: Organize project structure

- Create organized directory structure (src/, docs/, data/, static/, templates/)
- Add comprehensive .gitignore for Python projects
- Move Python source files to src/
- Move documentation files to docs/ with project/ and user/ subdirectories
- Move database files to data/
- Update all database path references in Python code
- Maintain Flask static/ and templates/ directories

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-10 00:40:39 +03:00
commit fd87ebca03
23 changed files with 7317 additions and 0 deletions

216
templates/index.html Normal file
View File

@@ -0,0 +1,216 @@
<!DOCTYPE html>
<html lang="ro">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Resurse educaționale - INDEX-SISTEM-JOCURI</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<div class="container">
<!-- Header with dropdown filters - exactly matching mockup -->
<div class="filters-header">
<form method="POST" action="{{ url_for('search') }}" id="searchForm">
<div class="filters-row">
<!-- Row 1: Valori, Durată, Tematică, Domeniu -->
<select name="valori" class="filter-select">
<option value=""> Valori </option>
{% for option in filters.get('valori', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
<select name="durata" class="filter-select">
<option value=""> Durată </option>
{% for option in filters.get('durata', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
<select name="tematica" class="filter-select">
<option value=""> Tematică </option>
{% for option in filters.get('tematica', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
<select name="domeniu" class="filter-select">
<option value=""> Domeniu </option>
{% for option in filters.get('domeniu', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
</div>
<div class="filters-row">
<!-- Row 2: Metodă, Materiale necesare, Numărul de participanți -->
<select name="metoda" class="filter-select">
<option value=""> Metodă </option>
{% for option in filters.get('metoda', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
<select name="materiale" class="filter-select">
<option value=""> Materiale necesare </option>
{% for option in filters.get('materiale', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
<select name="participanti" class="filter-select">
<option value=""> Numărul de participanți </option>
{% for option in filters.get('participanti', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
</div>
<div class="filters-row">
<!-- Row 3: Competențe Europene, Competențe Impactate, Vârsta -->
<select name="competente_fizice" class="filter-select">
<option value=""> Competențe Europene </option>
{% for option in filters.get('competente_fizice', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
<select name="competente_impactate" class="filter-select">
<option value=""> Competențe Impactate </option>
{% for option in filters.get('competente_impactate', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
<select name="varsta" class="filter-select">
<option value=""> Vârsta </option>
{% for option in filters.get('varsta', []) %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
</div>
<!-- Search box and buttons section -->
<div class="search-section">
<input type="text" name="search_query" class="search-input"
placeholder="cuvinte cheie" value="{{ request.form.get('search_query', '') }}">
<button type="submit" class="btn-aplica">Aplică</button>
<button type="button" class="btn-reseteaza" onclick="resetForm()">Resetează</button>
</div>
</form>
</div>
<!-- Branding section -->
<div class="branding">
<div class="initiative">
<p>Inițiativa:</p>
<div class="logo-container">
<img src="{{ url_for('static', filename='logo-noi-orizonturi.png') }}"
alt="Noi Orizonturi" class="brand-logo"
onerror="this.style.display='none'; this.nextElementSibling.style.display='block';">
<span class="brand-text" style="display:none;">Noi Orizonturi</span>
</div>
</div>
<div class="support">
<p>Sprijinită de:</p>
<div class="logo-container">
<img src="{{ url_for('static', filename='logo-telekom.png') }}"
alt="Telekom" class="brand-logo"
onerror="this.style.display='none'; this.nextElementSibling.style.display='block';">
<span class="brand-text" style="display:none;">Telekom</span>
</div>
</div>
</div>
<!-- Welcome section -->
<div class="welcome-section">
<h1>Resurse educaționale</h1>
<p class="subtitle">
Sistemul de indexare și căutare pentru activități educaționale
</p>
<p class="description">
Caută prin colecția de <strong>2000+ activități</strong> din <strong>200+ fișiere</strong>
folosind filtrele de mai sus sau introdu cuvinte cheie în caseta de căutare.
</p>
<!-- Statistics -->
<div class="stats-container">
<div class="stat-item">
<span class="stat-number" id="total-activities">-</span>
<span class="stat-label">Activități indexate</span>
</div>
<div class="stat-item">
<span class="stat-number" id="total-files">-</span>
<span class="stat-label">Fișiere procesate</span>
</div>
<div class="stat-item">
<span class="stat-number" id="categories-count">-</span>
<span class="stat-label">Categorii disponibile</span>
</div>
</div>
<!-- Quick start buttons -->
<div class="quick-start">
<h3>🚀 Start rapid:</h3>
<div class="quick-buttons">
<button onclick="quickSearch('team building')" class="quick-btn">Team Building</button>
<button onclick="quickSearch('jocuri cercetășești')" class="quick-btn">Jocuri Scout</button>
<button onclick="quickSearch('8-11 ani')" class="quick-btn">Cubs (8-11 ani)</button>
<button onclick="quickSearch('fără materiale')" class="quick-btn">Fără materiale</button>
<button onclick="quickSearch('orientare')" class="quick-btn">Orientare</button>
</div>
</div>
</div>
<!-- Footer -->
<footer class="footer">
<p>
🎮 <strong>INDEX-SISTEM-JOCURI v1.0</strong> |
Dezvoltat cu Claude AI |
<a href="/api/statistics" target="_blank">📊 Statistici</a>
</p>
<p class="footer-note">
Pentru probleme tehnice sau sugestii, contactați administratorul sistemului.
</p>
</footer>
</div>
<script>
// Load statistics on page load
async function loadStats() {
try {
const response = await fetch('/api/statistics');
const stats = await response.json();
document.getElementById('total-activities').textContent = stats.total_activities || '0';
document.getElementById('categories-count').textContent = Object.keys(stats.categories || {}).length;
// Estimate total files from categories
const totalFiles = Object.values(stats.file_statistics || [])
.reduce((sum, stat) => sum + (stat.files_processed || 0), 0);
document.getElementById('total-files').textContent = totalFiles || '0';
} catch (error) {
console.error('Error loading statistics:', error);
}
}
function resetForm() {
document.getElementById('searchForm').reset();
// Also redirect to clear URL parameters
window.location.href = '{{ url_for("index") }}';
}
function quickSearch(query) {
document.querySelector('input[name="search_query"]').value = query;
document.getElementById('searchForm').submit();
}
// Initialize page
document.addEventListener('DOMContentLoaded', function() {
loadStats();
});
</script>
</body>
</html>