# Ankan Pal > Backend & DevOps Engineer based in West Bengal, India. Portfolio: [https://itsyourap.dev](https://itsyourap.dev/) ## Pages - [Overview](https://itsyourap.dev/): Ankan Pal, Backend & DevOps Engineer in West Bengal, India. Explore backend services, cloud infrastructure, automation projects, and engineering case studies. - [Projects](https://itsyourap.dev/projects/): Explore 9 projects by Ankan Pal, including triggerd, icloud-to-gphotos, backend services, systems automation, computer vision, and web platforms. - [About](https://itsyourap.dev/about/): Meet Ankan Pal, a Backend & DevOps Engineer in West Bengal, India. Professional experience at ProjectX and Resourcio, education, and engineering background. - [Technical toolkit](https://itsyourap.dev/stack/): Ankan Pal’s technical toolkit: backend frameworks, AWS, Azure, Google Cloud, Kubernetes, Terraform, databases, programming languages, and delivery automation. - [Contact](https://itsyourap.dev/contact/): Contact Ankan Pal for backend engineering, cloud infrastructure, DevOps, and project conversations. Email, professional profiles, and a direct message form. - [triggerd](https://itsyourap.dev/projects/triggerd/): A Go daemon that turns ntfy notifications into allowlisted tasks on Linux, macOS, and Windows. An outbound subscription receives events; the operating system manages the work. - [icloud-to-gphotos](https://itsyourap.dev/projects/icloud-to-gphotos/): A Python pipeline that moves iCloud photo libraries to Google Photos in scheduled batches, preserves media metadata, and checks upload confirmation before removing the source asset. ## Contact and profiles Email: [contact@itsyourap.dev](mailto:contact@itsyourap.dev) Curriculum vitae: [Resume](https://s.itsyourap.dev/my-resume) - [GitHub](https://github.com/itsyourap) - [LinkedIn](https://linkedin.com/in/itsyourap) - [Stack Overflow](https://stackoverflow.com/users/17178385/itsyourap) - [𝕏](https://x.com/itsyourap) ## Experience ### DevOps Engineer — ProjectX Infinity Inc Mar 2024 to present Provisioning AWS infrastructure with Terraform, maintaining EKS, EC2, and Route53, and building CI/CD automation. Contributing to InfinityOS, a cloud operating system for application streaming. Organisation: [ProjectX Infinity Inc](https://projectx.cloud) ### Backend & Software Developer — Resourcio Private Limited Jun 2025 to Oct 2025 Built commerce backends for orders, payments, and role-based access, alongside a desktop bulk mailer, third-party API integrations, and document automation. Organisation: [Resourcio Private Limited](https://resourcio.in) ## Education ### B.Tech in Computer Science & Engineering [Academy of Technology (MAKAUT, West Bengal)](https://aot.edu.in) — Sep 2023 to present GPA 8.765 through semester 6 ### ISC, Class XII [Holy Angels’ School](https://haskatwa.org) — Feb 2021 to May 2023 91% ### ICSE, Class X [Holy Angels’ School](https://haskatwa.org) — Mar 2020 to May 2021 94.4% ## Technical toolkit ### Backend & APIs Application services and the interfaces between them. Spring Boot, Node.js, Express.js, Deno, Flask, FastAPI, REST, gRPC ### Infrastructure & delivery Provisioning environments, shipping changes, and operating services. Docker, Kubernetes, Terraform, ArgoCD, CI/CD, GitHub Actions, Shell scripting, Linux, Windows, Git, GitHub, systemd ### Cloud platforms Cloud services across infrastructure and application development. AWS, Microsoft Azure, Google Cloud, Firebase ### Data storage Relational, document, and embedded data stores. PostgreSQL, MySQL, MongoDB, SQLite ### Languages From application code to automation and system utilities. Java, Kotlin, Python, JavaScript, TypeScript, Go, C++, SQL, Bash ### Web & frontend Interfaces that make backend capabilities usable. HTML, CSS, Tailwind CSS, React, Next.js, Astro, Vite, Webpack ### Mobile Native Android applications and interfaces. Android development, Jetpack Compose ### Testing & security Browser automation, security practices, and further areas of study. Selenium, Web security, Cybersecurity, Ethical hacking ## Projects ### triggerd Event-driven task automation Portfolio entry: [triggerd](https://itsyourap.dev/projects/triggerd/) A Go daemon that turns ntfy notifications into allowlisted operating-system tasks. An outbound subscription connects events to systemd, launchd, or Windows Task Scheduler, with bounded dispatch and explicit failure handling. Category: Systems & automation Technologies: Go, ntfy, systemd, GitHub Actions Engineering focus: Execution boundaries and controlled concurrency **Explicit actions.** Incoming events select a configured action. Strict decoding and program/argument arrays keep notification payloads separate from executable commands. **Bounded dispatch.** A worker pool and a finite queue bound execution calls. Reconnects use backoff and jitter; failed actions are not automatically retried. - [Source](https://github.com/itsyourap/triggerd) - [Documentation](https://github.com/itsyourap/triggerd/tree/main/docs) ### icloud-to-gphotos Resumable photo migration Portfolio entry: [icloud-to-gphotos](https://itsyourap.dev/projects/icloud-to-gphotos/) A Python pipeline for moving iCloud media to Google Photos in scheduled batches. A SQLite ledger tracks each resource, preserves progress across runs, and gates source deletion on upload confirmation and an age grace period. Category: Systems & automation Technologies: Python, SQLite, ExifTool, systemd Engineering focus: Recovery, metadata fidelity, and cautious deletion **Resource-level recovery.** A persistent ledger tracks individual media resources. A Live Photo requires confirmation of both its still image and video before the iCloud asset can be deleted. **Unattended operation.** Disk-aware batch planning, finite retry budgets, diagnostic commands, and scheduled jobs support repeatable operation on modest machines. - [Source](https://github.com/itsyourap/icloud-to-gphotos) - [Usage guide](https://github.com/itsyourap/icloud-to-gphotos#readme) ### TechFiesta Backend Event registration & payment services Portfolio entry: [TechFiesta Backend](https://itsyourap.dev/projects/#techfiesta-backend) A central backend for a college technology festival, managing event registrations and payments. The project pairs an Express.js API with PostgreSQL and Prisma, with TSOA in the service stack. Category: Web platforms Technologies: Express.js, TSOA, PostgreSQL, Prisma Engineering focus: Registration and payment workflows **Application service.** The central backend brings festival registration and payment workflows into one service. **Data & API stack.** Express.js and TSOA support the API; PostgreSQL and Prisma provide the data layer. - [Project organisation](https://github.com/AOTxTechFiesta/) ### RTSP Human Capture Concurrent video stream processing Portfolio entry: [RTSP Human Capture](https://itsyourap.dev/projects/#rtsp-human-capture) Real-time person detection from RTSP camera streams using Python, YOLO, and OpenCV. Supports concurrent streams, GPU acceleration, and an automatic HOG fallback, with configurable snapshots or video recording for captured detections. Category: Systems & automation Technologies: Python, YOLO, OpenCV, RTSP Engineering focus: Concurrency and detection fallback **Detection pipeline.** YOLOv4 and YOLOv3 detection support GPU acceleration, with an automatic HOG fallback. **Stream handling.** Multiple camera streams run concurrently, with configurable snapshot and video capture. - [Source](https://github.com/itsyourap/rtsp-human-capture) - [Documentation](https://rtsp-human-capture.docs.itsyourap.dev/) ### GnosisCode A coding platform for colleges Portfolio entry: [GnosisCode](https://itsyourap.dev/projects/#gnosiscode) A platform for practising programming and tracking student performance. It brings code execution analysis, performance dashboards, and role-based access into a college coding environment. Category: Web platforms Technologies: React, Express.js, PostgreSQL, Prisma, Docker Engineering focus: Code execution and student progress **Application scope.** The platform combines student-facing coding workflows with performance dashboards and access controls for different roles. ### EcoGrow Top 8 finalist, FrostHacks S01 Portfolio entry: [EcoGrow](https://itsyourap.dev/projects/#ecogrow) A web platform exploring how iframe-generated advertising revenue can fund tree planting. Built with Team ByteWise for FrostHacks S01, where it placed among the top eight finalists. Category: Web platforms Technologies: Next.js, Express.js, MongoDB, ConductorOSS Engineering focus: Connecting web workflows to environmental contributions - [Source](https://github.com/Team-ByteWise/frosthacks-2k25) ### EcoNFT Environmental contributions & digital ownership Portfolio entry: [EcoNFT](https://itsyourap.dev/projects/#econft) A decentralized platform that rewards tree-planting contributions with unique NFTs. Built with Team ByteWise and showcased at Diversion 2025. Category: Experiments Technologies: Next.js, Solidity, Hardhat, Web3, MongoDB Engineering focus: Web applications and smart contracts - [Source](https://github.com/Team-ByteWise/diversion-2k25) ### Sentry Radar System Second prize, inter-school science exhibition Portfolio entry: [Sentry Radar System](https://itsyourap.dev/projects/#sentry-radar-system) A sonar-based object detection project with remote Android connectivity. An early exploration of hardware and software working together, built with Arduino, embedded C++, and Java. Category: Experiments Technologies: Java, Embedded C++, Arduino, Android Engineering focus: Sensors, detection logic, and remote control ### ArgumentCatcher Process debugging utility Portfolio entry: [ArgumentCatcher](https://itsyourap.dev/projects/#argumentcatcher) A Java middleware utility for capturing and analysing process launch arguments. It helps inspect process interactions while debugging complex environments. Category: Systems & automation Technologies: Java Engineering focus: Visibility into process invocation - [Source](https://github.com/itsyourap/ArgumentCatcher) ## Engineering case studies ### triggerd: Event-driven task automation across operating systems Case study: [triggerd](https://itsyourap.dev/projects/triggerd/) A Go daemon that turns ntfy notifications into allowlisted tasks on Linux, macOS, and Windows. An outbound subscription receives events; the operating system manages the work. #### Context I wanted a small way to trigger a task, such as regenerating a résumé, from a notification. The design keeps task permissions, dependencies, and logs with the existing service manager. triggerd connects the notification to a configured action through a narrow, inspectable execution path. #### System design 1. **Receive:** An outbound ntfy stream delivers a notification. 2. **Validate:** Decode the payload and resolve an allowlisted action. 3. **Dispatch:** Apply queue, concurrency, and timeout policies. 4. **Trigger:** Ask the platform service manager to start the task. The implemented path: ntfy notifications become configured systemd, launchd, or Task Scheduler commands. #### Key decisions **Keep authority in configuration.** The message selects an action name. Configuration defines its executor and target. Strict JSON decoding rejects unknown fields and invalid names before work enters the queue. The OS-task executor builds argument arrays and ignores incoming parameters, keeping network input out of the command line. **Make overload visible.** A bounded queue and worker pool control pending and active calls. Queue overflow is dropped, logged, and counted. Per-action guards reject overlapping executor calls, and each call receives a timeout. Shutdown discards waiting requests while giving active calls a configurable grace period. **Retry the connection deliberately.** The ntfy source reconnects with exponential backoff and jitter. A read-idle watchdog detects stalled streams, and a recent-message window suppresses replayed IDs. Failed actions are left to the operator because repeating a task may repeat its side effects. Invalid credentials stop the daemon with an actionable failure. **Isolate platform behavior.** The core pipeline separates event sources, decoding, action lookup, and execution. Small platform planners handle systemd, launchd, and Task Scheduler. An injectable command runner lets tests check commands and errors without starting real services. The same planning code supports configuration validation and dry runs. **Carry the platform split into delivery.** GitHub Actions runs build, vet, and race-detector tests across Linux, macOS, and Windows. The release workflow cross-compiles six platform targets and attaches binaries with SHA-256 checksums to versioned releases after the required checks complete. #### Operation YAML configuration defines sources, actions, and dispatcher limits. Credentials can come from environment variables, and structured logs record execution outcomes. Deployment examples cover systemd services, launchd agents, and Windows scheduled tasks. The CLI offers configuration validation and a dry run through the event pipeline. #### Implementation limits On macOS and Windows, success confirms that the task was started; the service manager owns its subsequent lifecycle. The duplicate window lives in memory, and queue overflow drops events. These are deliberate limits of a small automation daemon. Current adapters are ntfy and OS-task execution. #### Source references - [Source repository](https://github.com/itsyourap/triggerd) - [Architecture](https://github.com/itsyourap/triggerd/blob/main/docs/architecture.md) - [Security model](https://github.com/itsyourap/triggerd/blob/main/docs/security.md) - [Platform behavior](https://github.com/itsyourap/triggerd/blob/main/docs/platforms.md) - [Releases](https://github.com/itsyourap/triggerd/releases) ### icloud-to-gphotos: Resumable photo migration with verified deletion Case study: [icloud-to-gphotos](https://itsyourap.dev/projects/icloud-to-gphotos/) A Python pipeline that moves iCloud photo libraries to Google Photos in scheduled batches, preserves media metadata, and checks upload confirmation before removing the source asset. #### Context Moving a photo library involves more than copying files. A Live Photo has multiple components, edited images have additional versions, and missing capture dates can scramble the destination timeline. I built the migration around explicit resource state so interruptions and partial uploads can be handled deliberately. #### System design 1. **Plan:** Read oldest first; assign resources and a batch budget. 2. **Prepare:** Stream originals to disk and backfill missing metadata. 3. **Confirm:** Upload media and record each remote confirmation. 4. **Retire:** Check every resource and the grace period before deletion. The SQLite ledger connects each stage. An asset becomes eligible for deletion only after every planned resource is confirmed remotely; deletion must also be enabled. #### Key decisions **Make deletion conditional.** An upload attempt is insufficient evidence to delete a source. The pipeline requires a returned media key or a confirmed remote duplicate for each resource, checks a configurable age grace period, and rechecks the ledger immediately before deletion. Both components of a Live Photo must satisfy that requirement. **Keep progress independent of the process.** SQLite records assets, individual resources, and run outcomes. A later run skips resources already confirmed remotely. Failures have a finite retry budget; exhausted items are reported and retained in iCloud so one troublesome file does not hold up the remaining library. **Fit the work to the machine.** Batches use item and byte budgets adjusted for available disk headroom. Downloads stream to temporary files, check their expected size, and rename atomically after completion. Staging is cleared between batches. The byte budget is a planning limit, with individual assets kept together. **Preserve meaning as well as media.** Metadata backfill fills missing tags without replacing existing ones. EXIF wall-clock timestamps and UTC QuickTime timestamps need different treatment. Live Photo components share a filename stem for pairing, while edited renders upload in a separate pass to avoid accidental pairing. **Make unattended work inspectable.** The CLI includes dependency and credential checks, progress inspection, and JSON run reports. Reauthentication alerts make expired iCloud sessions visible. Dry-run and no-delete modes let an operator inspect the migration policy before enabling source removal. #### Operation Linux deployment uses a dedicated systemd service account, restricted filesystem access, journal logging, and a persistent timer with explicit Asia/Kolkata scheduling. A randomized delay spreads the nightly start. Windows Task Scheduler support provides the same pipeline on a desktop host. #### Implementation limits The Google Photos integration uses an unofficial client and may need maintenance when its endpoint changes. iCloud sessions occasionally require interactive reauthentication. Shared libraries, hidden items, album membership, favourites, and keywords are outside the supported migration scope. #### Source references - [Repository](https://github.com/itsyourap/icloud-to-gphotos) - [Pipeline](https://github.com/itsyourap/icloud-to-gphotos/blob/main/src/icloud_to_gphotos/pipeline.py) - [State ledger](https://github.com/itsyourap/icloud-to-gphotos/blob/main/src/icloud_to_gphotos/ledger.py) - [Failure-path tests](https://github.com/itsyourap/icloud-to-gphotos/blob/main/tests/test_pipeline.py) - [Linux deployment](https://github.com/itsyourap/icloud-to-gphotos/blob/main/docs/DEPLOY_LINUX.md)