timetracker/.ai/features/export.md
2026-08-03 21:51:48 +02:00

1.8 KiB

Feature: Export

Supported Formats

Format Package Use case
CSV csv Spreadsheet import (Excel, etc.)
PDF pdf Printable report
JSON dart:convert Backup / data portability

CSV Schema

id,project,start_time,end_time,duration_seconds,note,tags
42,My Project,2026-07-01T08:00:00,2026-07-01T10:30:00,9000,"Standup",planning|backend
  • Date format: ISO 8601
  • Tags: pipe-separated within the cell
  • Encoding: UTF-8 with BOM for Excel compatibility

PDF Layout

  1. Header: App name + export date + selected period
  2. Summary table: Project | Total hours | % of total
  3. Entries table: Date | Project | Duration | Note | Tags
  4. Footer: Generated by Timetrack

Use pw.Document from the pdf package. Render with pw.Table, pw.Text, pw.Chart (optional).

JSON Schema

{
  "exportedAt": "2026-07-12T10:00:00Z",
  "version": 1,
  "projects": [ { "id": 1, "name": "...", "color": -16711936 } ],
  "tags": [ { "id": 1, "name": "backend" } ],
  "entries": [
    {
      "id": 42, "projectId": 1, "startTime": "...", "endTime": "...",
      "durationSeconds": 9000, "note": "...", "tagIds": [1]
    }
  ]
}

JSON export can be used as a full backup and re-imported in a future version.

Share Flow

final file = await _buildExportFile(format);          // write to temp dir
await Share.shareXFiles([XFile(file.path)],           // share_plus
  subject: 'Timetrack Export ${DateFormat.yMd().format(DateTime.now())}');

Always write to getTemporaryDirectory() — never to arbitrary paths.

Export Scope

  • User selects: date range + format + optional project filter
  • Available from Settings screen and Reports screen (share button)