{% extends "base.html" %} {% from "components/ui.html" import page_header, breadcrumb_nav, button, filter_badge, empty_state, loading_spinner, progress_indicator %} {% block content %} {% set breadcrumbs = [ {'text': 'Projects'} ] %} {{ page_header( icon_class='fas fa-folder', title_text='Projects', subtitle_text='Manage your projects here', breadcrumbs=breadcrumbs, actions_html='Create Project' if (current_user.is_admin or has_permission('create_projects')) else None ) }}

{{ _('Filter Projects') }}

{% if custom_field_definitions %} {% for definition in custom_field_definitions %}
{% endfor %} {% endif %}

{{ projects|length }} project{{ 's' if projects|length != 1 else '' }} found

Export {% if current_user.is_admin %} {% endif %}
{% if current_user.is_admin %} {% endif %} {% for project in projects %} {% if current_user.is_admin %} {% endif %} {% else %} {% endfor %}
Name Client Status Billable Rate Budget Actions
{% set is_fav = favorite_project_ids and project.id in favorite_project_ids %} {{ project.name }} {% if project.client_id %} {{ project.client }} {% else %} {{ project.client }} {% endif %} {% if project.status == 'active' %} Active {% elif project.status == 'inactive' %} Inactive {% else %} Archived {% endif %} {% if project.billable %} Billable {% else %} Non-billable {% endif %} {% if project.hourly_rate %} {{ '%.2f'|format(project.hourly_rate|float) }}/h {% else %} {% endif %} {% if project.budget_amount %} {% set consumed = (project.budget_consumed_amount or 0.0) %} {% set total = project.budget_amount|float %} {% set pct = (consumed / total * 100) if total > 0 else 0 %} {% if pct >= 90 %} {% set badge_classes = 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300' %} {% elif pct >= 70 %} {% set badge_classes = 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300' %} {% else %} {% set badge_classes = 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300' %} {% endif %} {{ pct|round(0) }}% {% else %} {% endif %} View
{% if not projects %} {% from "components/ui.html" import empty_state %} {% set actions %} {% if current_user.is_admin %} Create Your First Project {% endif %} Learn More {% endset %} {% if search or request.args.get('client') or request.args.get('status') != 'all' %} {{ empty_state('fas fa-search', 'No Projects Match Your Filters', 'Try adjusting your filters to see more results. You can clear filters or create a new project that matches your criteria.', actions, type='no-results') }} {% else %} {{ empty_state('fas fa-folder-open', 'No Projects Yet', 'Projects help you organize your work and track time efficiently. Create your first project to get started!', actions, type='no-data') }} {% endif %} {% endif %}
{% endblock %} {% block scripts_extra %} {% endblock %}