{"id":50439837,"url":"https://github.com/dojo-engineering/ios-interview-livecoding","last_synced_at":"2026-05-31T18:30:43.777Z","repository":{"id":356560424,"uuid":"1226469922","full_name":"dojo-engineering/ios-interview-livecoding","owner":"dojo-engineering","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-08T15:26:58.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-08T17:32:50.360Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dojo-engineering.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-01T12:47:07.000Z","updated_at":"2026-05-08T15:27:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dojo-engineering/ios-interview-livecoding","commit_stats":null,"previous_names":["dojo-engineering/ios-interview-livecoding"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/dojo-engineering/ios-interview-livecoding","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dojo-engineering%2Fios-interview-livecoding","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dojo-engineering%2Fios-interview-livecoding/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dojo-engineering%2Fios-interview-livecoding/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dojo-engineering%2Fios-interview-livecoding/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dojo-engineering","download_url":"https://codeload.github.com/dojo-engineering/ios-interview-livecoding/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dojo-engineering%2Fios-interview-livecoding/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33744444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-31T18:30:43.108Z","updated_at":"2026-05-31T18:30:43.772Z","avatar_url":"https://github.com/dojo-engineering.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# iOS Live Coding Task\n\nWelcome! This is a collaborative session — we're not looking for perfection, we're interested in how you think, how you structure your code, and how you communicate decisions as you go.\n\nFeel free to **think out loud**, ask questions, and discuss trade-offs as you work. There are no trick questions.\n\n---\n\n## Prerequisites\n\n- Xcode 26 or later\n- iOS 26+ deployment target\n- No third-party dependencies — the project builds out of the box\n- **No AI**: Please refrain from using any AI tools/agents to help you with this task.\n\n---\n\n## Context\n\nThe project contains a basic data layer and a stubbed-out `TransactionListScreen`. The `NetworkClient` currently simulates a network call by resolving pre-populated mock data with an artificial 500 ms delay.\n\n### Project structure\n\n```\niOS_technical_task/\n├── DataLayer/\n│   ├── Models/\n│   │   └── TransactionDTO.swift       — Transaction, Amount\n│   └── TransactionsEndpoint.swift  — Mock endpoints + Endpoint\u003cT\u003e type\n├── Networking/\n│   └── NetworkClient.swift         — Async GET helper\n└── PresentationLayer/\n    └── TransactionListScreen/\n        └── TransactionListScreen.swift   — Your starting point\n```\n\n### Data model\n\n| Field | Type | Description |\n|---|---|---|\n| `id` | `UUID` | Unique transaction identifier |\n| `amount.value` | `Decimal` | Monetary value (can be negative for refunds) |\n| `amount.currency` | `String` | ISO 4217 currency code, e.g. `\"GBP\"` |\n| `createdAt` | `Date` | Creation timestamp |\n| `merchantName` | `String` | Display name of the merchant |\n\n---\n\n## Tasks\n\n### 1. Display a list of transactions\n\nFetch the transaction list using `NetworkClient` and display it in `TransactionListScreen`.\n\nEach row should show, at minimum:\n- Merchant name\n- Formatted amount (with currency symbol)\n- Transaction status\n\n**Things to consider:**\n- How do you manage loading, success, and error states?\n- How do you keep the view layer decoupled from the data layer?\n\n---\n\n### 2. Search\n\nAdd a search bar that lets the user filter the transaction list by merchant name.\n\nImplement this as **local (client-side) filtering** for now, but be ready to discuss how you would approach it with a real backend.\n\n---\n\n### 3. Navigate to a transaction detail screen\n\nTapping a row should push a detail screen that displays all the information for that transaction.\n\n---\n\n## Guidelines\n\n- Use **SwiftUI** and **Swift Concurrency** (`async/await`)\n- No third-party dependencies needed\n- There's no single right answer — we value clear reasoning over completeness\n- Feel free to refactor any existing code if you think it improves the solution\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdojo-engineering%2Fios-interview-livecoding","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdojo-engineering%2Fios-interview-livecoding","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdojo-engineering%2Fios-interview-livecoding/lists"}