<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Engineer — Support — Portfolio and notes</title>
    <link>https://support.engineer.company/</link>
    <description>Engineer ApS — software development &amp; IT consulting in Copenhagen, Denmark. A portfolio of proven engineering achievements across software, data, cloud and IT.</description>
    <language>en</language>
    <copyright>Copyright © 2025 – present · Engineer ApS</copyright>
    <generator>Hugo 0.166.0</generator>
    <docs>https://www.rssboard.org/rss-specification</docs>
    <ttl>60</ttl>
    <lastBuildDate>Sun, 13 Sep 2026 01:45:55 +0200</lastBuildDate>
    <atom:link href="https://support.engineer.company/index.xml" rel="self" type="application/rss+xml" />
    <image>
      <url>https://support.engineer.company/assets/icons/apple/apple-touch-icon-144x144.png</url>
      <title>Engineer — Support — Portfolio and notes</title>
      <link>https://support.engineer.company/</link>
    </image>
    <item>
      <title>Established a Technical Support department, servicing over 10,000 clients with IT support and troubleshooting solutions.</title>
      <link>https://support.engineer.company/portfolio/established-a-technical-support-department-servicing-over-10-40/</link>
      <guid isPermaLink="true">https://support.engineer.company/portfolio/established-a-technical-support-department-servicing-over-10-40/</guid>
      <pubDate>Sun, 13 Sep 2026 01:45:50 +0200</pubDate>
      <description>Established a Technical Support department serving 10,000&#43; clients, turning support from reactive fixes into a scalable company strength.</description>
      <category domain="https://support.engineer.company/categories/">Mentoring &amp; Coaching</category>
      <category domain="https://support.engineer.company/categories/">Product &amp; Requirements</category>
      <category domain="https://support.engineer.company/categories/">Project Management</category>
      <category domain="https://support.engineer.company/categories/">Stakeholder &amp; Reporting</category>
      <category domain="https://support.engineer.company/categories/">System Administration</category>
      <category domain="https://support.engineer.company/categories/">Team Leadership</category>
      <category domain="https://support.engineer.company/services/">IT Support &amp; Helpdesk</category>
      <category domain="https://support.engineer.company/services/">Project Management (Agile)</category>
      <category domain="https://support.engineer.company/services/">Team Building &amp; Mentoring</category>
      <content:encoded><![CDATA[<p><strong>Situation.</strong> The client base was growing and needed dependable technical support, and there just wasn&rsquo;t a dedicated function to give it to them at any real scale. Support was happening ad hoc, which works for a handful of clients and quietly falls apart as the numbers climb.</p>
<p><strong>Task.</strong> Standing up an actual technical‑support capability — one that could serve a large and still‑growing client base — was the job.</p>
<p><strong>Action.</strong> A Technical Support department got built from nothing. That meant deciding how it would actually work before hiring into it — the process for how a request came in and got resolved, the tooling to handle volume, the standard for what good support looked like — and then building the capacity to deliver IT support and troubleshooting to a lot of clients at once. Starting from scratch was the advantage, honestly; it could be designed for the scale the company was heading toward instead of patching something that had grown up by accident.</p>
<p><strong>Result.</strong> The department ended up serving over ten thousand clients with reliable support and troubleshooting. Support went from a thing done reactively to a genuine strength of the company — something that scaled with the client base instead of buckling under it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Managed a team delivering IT support, data recovery, and hardware repair services to over 1,000 clients, ensuring high‑quality service.</title>
      <link>https://support.engineer.company/portfolio/managed-a-team-delivering-it-support-data-recovery-47/</link>
      <guid isPermaLink="true">https://support.engineer.company/portfolio/managed-a-team-delivering-it-support-data-recovery-47/</guid>
      <pubDate>Sun, 13 Sep 2026 01:45:50 +0200</pubDate>
      <description>Led a team delivering IT support, data recovery and hardware repair to 1,000&#43; clients, building a reputation for reliable service.</description>
      <category domain="https://support.engineer.company/categories/">Mentoring &amp; Coaching</category>
      <category domain="https://support.engineer.company/categories/">Stakeholder &amp; Reporting</category>
      <category domain="https://support.engineer.company/categories/">System Administration</category>
      <category domain="https://support.engineer.company/categories/">Team Leadership</category>
      <category domain="https://support.engineer.company/services/">Hardware Repair &amp; Data Recovery</category>
      <category domain="https://support.engineer.company/services/">IT Support &amp; Helpdesk</category>
      <category domain="https://support.engineer.company/services/">Team Building &amp; Mentoring</category>
      <content:encoded><![CDATA[<p><strong>Situation.</strong> The company was the place a large base of clients came to when their IT broke — support, data recovery, hardware repair, the full spread. Meeting that kind of steady, unglamorous demand isn&rsquo;t about heroics; it&rsquo;s about having a team that runs well day after day, because the work never really stops coming.</p>
<p><strong>Task.</strong> Managing the team that delivered all that was the job, and keeping the quality consistent whether it was a quiet week or everything arriving at once.</p>
<p><strong>Action.</strong> The team ran IT support, data recovery and hardware repair for over a thousand clients. A lot of that was the organising underneath — making sure work got picked up and not dropped, setting a standard for what &ldquo;fixed&rdquo; actually meant so people weren&rsquo;t getting half‑repairs back, and keeping the team effective when the queue was long. Data recovery especially is work you can&rsquo;t be casual about; it&rsquo;s usually someone&rsquo;s photos or their business sitting on that drive, and they&rsquo;re already having a bad day by the time they reach you.</p>
<p><strong>Result.</strong> The team served over a thousand clients and built a real reputation for reliable service. In that kind of business the reputation is everything — people come back, and they tell others, precisely because the last time something broke you actually sorted it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Configured and deployed 1,000 Wi‑Fi routers, improving network accessibility and performance for clients.</title>
      <link>https://support.engineer.company/portfolio/configured-and-deployed-1-000-wi-fi-routers-48/</link>
      <guid isPermaLink="true">https://support.engineer.company/portfolio/configured-and-deployed-1-000-wi-fi-routers-48/</guid>
      <pubDate>Sun, 13 Sep 2026 01:45:50 +0200</pubDate>
      <description>Configured and deployed 1,000 Wi-Fi routers with a standard setup, giving clients dependable wireless access and performance.</description>
      <category domain="https://support.engineer.company/categories/">Infrastructure</category>
      <category domain="https://support.engineer.company/categories/">Networking &amp; VPN</category>
      <category domain="https://support.engineer.company/categories/">Reliability &amp; Backups</category>
      <category domain="https://support.engineer.company/categories/">Security</category>
      <category domain="https://support.engineer.company/categories/">System Administration</category>
      <category domain="https://support.engineer.company/services/">IT Support &amp; Helpdesk</category>
      <category domain="https://support.engineer.company/services/">Networking &amp; VPN Setup</category>
      <category domain="https://support.engineer.company/services/">System Administration</category>
      <content:encoded><![CDATA[<p><strong>Situation.</strong> Clients needed wireless that just worked, and that came down to configuring and rolling out a large number of Wi‑Fi routers — and doing it the same careful way every time, because a router set up sloppily is either insecure or slow, and usually you find out which one later.</p>
<p><strong>Task.</strong> Configuring and deploying those routers to give clients better network access and performance was the job.</p>
<p><strong>Action.</strong> A thousand Wi‑Fi routers got configured and deployed. The trick at that number is standardising the setup — a consistent, secure, sensible configuration — rather than tuning each one from scratch on the day, because a thousand hand‑crafted routers is a thousand different things to support later. So they were set up for security and performance the same way each time, and rolled out reliably across client sites.</p>
<p><strong>Result.</strong> The thousand routers gave clients dependable wireless — better access, better performance — and did it consistently, because the setup was standard rather than improvised. A router nobody has to think about again is the goal; most of these got there.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Managed 4,000 computer repairs, ensuring rapid and effective resolution of hardware and software issues.</title>
      <link>https://support.engineer.company/portfolio/managed-4-000-computer-repairs-ensuring-rapid-and-49/</link>
      <guid isPermaLink="true">https://support.engineer.company/portfolio/managed-4-000-computer-repairs-ensuring-rapid-and-49/</guid>
      <pubDate>Sun, 13 Sep 2026 01:45:50 +0200</pubDate>
      <description>Handled 4,000 computer repairs with fast, effective resolution of hardware and software issues, upholding a name for dependable service.</description>
      <category domain="https://support.engineer.company/categories/">System Administration</category>
      <category domain="https://support.engineer.company/services/">Hardware Repair &amp; Data Recovery</category>
      <category domain="https://support.engineer.company/services/">IT Support &amp; Helpdesk</category>
      <content:encoded><![CDATA[<p><strong>Situation.</strong> There was a constant stream of computer repairs coming through — four thousand of them over time — and every one was someone waiting to get their machine back and get on with their day. Hardware faults, software faults, the whole mix, and clients judged the shop on how fast and how properly they got fixed.</p>
<p><strong>Task.</strong> Managing those repairs was the job — keeping problems getting resolved quickly and, just as importantly, correctly.</p>
<p><strong>Action.</strong> Four thousand computer repairs went through — diagnosing the hardware and software faults, organising the workflow so machines moved through instead of piling up, and holding the quality so a repair was actually done right rather than sent back out to fail again next week. A repair that comes back is worse than a slow one; it costs the client a second trip and costs the shop the trust. So the throughput mattered, but never at the expense of fixing it the first time.</p>
<p><strong>Result.</strong> All four thousand got resolved, and quickly. People got their machines back working and got on with things, and the company&rsquo;s name for dependable service held up — which in a repair shop is the whole business.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Provided round‑the‑clock 24/7 infrastructure support for an IPTV/OTT streaming platform, administering ~1,000 servers plus client‑owned systems for global customers in China, the US and Germany.</title>
      <link>https://support.engineer.company/portfolio/provided-round-the-clock-24-7-infrastructure-support-82/</link>
      <guid isPermaLink="true">https://support.engineer.company/portfolio/provided-round-the-clock-24-7-infrastructure-support-82/</guid>
      <pubDate>Sun, 13 Sep 2026 01:45:50 +0200</pubDate>
      <description>Provided 24/7 infrastructure support for an IPTV/OTT streaming platform — ~1,000 servers plus client systems across China, the US and Germany.</description>
      <category domain="https://support.engineer.company/categories/">Cloud</category>
      <category domain="https://support.engineer.company/categories/">Infrastructure</category>
      <category domain="https://support.engineer.company/categories/">Linux &amp; Servers</category>
      <category domain="https://support.engineer.company/categories/">Monitoring &amp; Observability</category>
      <category domain="https://support.engineer.company/categories/">Networking &amp; VPN</category>
      <category domain="https://support.engineer.company/categories/">Reliability &amp; Backups</category>
      <category domain="https://support.engineer.company/categories/">System Administration</category>
      <category domain="https://support.engineer.company/services/">IT Support &amp; Helpdesk</category>
      <category domain="https://support.engineer.company/services/">Site Reliability &amp; Monitoring</category>
      <category domain="https://support.engineer.company/services/">System Administration</category>
      <content:encoded><![CDATA[<p><strong>Situation.</strong> This was an IPTV/OTT streaming platform with customers spread across China, the US and Germany, which meant there was no quiet hour to do maintenance in — someone, somewhere, was always watching. Downtime on a platform like that isn&rsquo;t an abstract metric; it&rsquo;s someone&rsquo;s television just stopping, and they don&rsquo;t care why.</p>
<p><strong>Task.</strong> Keeping the platform&rsquo;s infrastructure available around the clock was the job — genuinely around the clock, not &ldquo;business hours plus an on‑call rota nobody answers.&rdquo;</p>
<p><strong>Action.</strong> 24/7 support ran for roughly a thousand servers, plus a good number of client‑owned systems on top of that — administering them, monitoring them, keeping them secured and configured across the whole streaming estate. Because customers sat in three very different time zones, &ldquo;after hours&rdquo; didn&rsquo;t really exist; a problem at 3am local was primetime for someone else, so it got treated as primetime. A lot of the work was noticing something drifting before it became an outage, because on a live streaming platform you don&rsquo;t get to fix things quietly after the fact.</p>
<p><strong>Result.</strong> The platform stayed continuously available for a global audience, with problems caught and dealt with at whatever hour they turned up, before they reached a viewer&rsquo;s screen. On a 24/7 service that&rsquo;s the whole job — success looks like nothing happening, which is exactly what the viewers wanted.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Performed data recovery across a wide range of media — SD cards, HDDs, SSDs, RAID arrays, external drives and Mac systems.</title>
      <link>https://support.engineer.company/portfolio/performed-data-recovery-across-a-wide-range-of-92/</link>
      <guid isPermaLink="true">https://support.engineer.company/portfolio/performed-data-recovery-across-a-wide-range-of-92/</guid>
      <pubDate>Sun, 13 Sep 2026 01:45:50 +0200</pubDate>
      <description>Recovered critical data across SD cards, HDDs, SSDs, RAID arrays, external drives and Mac systems — files back from devices written off as lost.</description>
      <category domain="https://support.engineer.company/categories/">Reliability &amp; Backups</category>
      <category domain="https://support.engineer.company/categories/">System Administration</category>
      <category domain="https://support.engineer.company/services/">Hardware Repair &amp; Data Recovery</category>
      <category domain="https://support.engineer.company/services/">IT Support &amp; Helpdesk</category>
      <content:encoded><![CDATA[<p><strong>Situation.</strong> People turned up with storage that had failed or been damaged, and data on it they urgently needed back — and by the time someone&rsquo;s carrying a dead drive into a shop, they&rsquo;re usually past worried and into panicking. Photos, business files, the only copy of something that mattered.</p>
<p><strong>Task.</strong> Recovering their data, across whatever media they walked in with, was the job.</p>
<p><strong>Action.</strong> Data recovery ran across pretty much every common storage type — SD cards, spinning HDDs, SSDs, RAID arrays, external drives, Mac systems. Each of those fails and gives up its data differently: an SSD is a different problem from a platter drive, a RAID array is a different problem again, and a Mac filesystem has its own quirks. So the work was as much about knowing the right approach for the specific medium as it was about any single technique.</p>
<p><strong>Result.</strong> Clients got critical data back from devices they&rsquo;d already written off as gone, across every common kind of storage. There&rsquo;s a specific relief on someone&rsquo;s face when you hand back the drive with their files intact — that was the point of the work, and it happened across the whole range of media.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Diagnosed and repaired laptop hardware — screens, hinges, keyboards, trackpads, motherboards and power — and resolved software issues across Linux, Windows and Mac.</title>
      <link>https://support.engineer.company/portfolio/diagnosed-and-repaired-laptop-hardware-screens-hinges-keyboards-93/</link>
      <guid isPermaLink="true">https://support.engineer.company/portfolio/diagnosed-and-repaired-laptop-hardware-screens-hinges-keyboards-93/</guid>
      <pubDate>Sun, 13 Sep 2026 01:45:50 +0200</pubDate>
      <description>Diagnosed and repaired laptop hardware — screens, hinges, keyboards, trackpads, motherboards, power — and fixed software on Linux, Windows and Mac.</description>
      <category domain="https://support.engineer.company/categories/">Linux &amp; Servers</category>
      <category domain="https://support.engineer.company/categories/">Reliability &amp; Backups</category>
      <category domain="https://support.engineer.company/categories/">System Administration</category>
      <category domain="https://support.engineer.company/services/">Hardware Repair &amp; Data Recovery</category>
      <category domain="https://support.engineer.company/services/">IT Support &amp; Helpdesk</category>
      <content:encoded><![CDATA[<p><strong>Situation.</strong> Laptops came in with the full range of things that go wrong with laptops — cracked screens, broken hinges, dead keyboards, failing trackpads, motherboard faults, power problems — plus the software side, across Linux, Windows and Mac. Basically, whatever was wrong with it, it landed on the bench.</p>
<p><strong>Task.</strong> Diagnosing and fixing them reliably was the job — reliably being the operative word, because a laptop repair that doesn&rsquo;t hold is just a delayed second visit.</p>
<p><strong>Action.</strong> The hardware was repaired end to end — screens, hinges, keyboards, trackpads, motherboards, power — which at the motherboard level is genuinely fiddly, close work, and the software problems resolved across all three operating systems. The diagnosis is usually the real skill: a laptop that won&rsquo;t power on could be the charger, the board, or the battery, and the repair is only as good as the guess about what&rsquo;s actually broken. So the care went into finding the real fault before touching anything.</p>
<p><strong>Result.</strong> Machines went back to their owners working and dependable, hardware and software both sorted. A repair that holds up is the only kind worth doing, and getting the diagnosis right first is what made these hold.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Opening a dApp inside Solana mobile wallets</title>
      <link>https://support.engineer.company/notes/solana-mobile-wallet-deeplinks/</link>
      <guid isPermaLink="true">https://support.engineer.company/notes/solana-mobile-wallet-deeplinks/</guid>
      <pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate>
      <description>Why Phantom, Solflare and Backpack browse deep links fail on mobile, and the exact formats, trigger rules and fixes that make them work.</description>
      <content:encoded><![CDATA[<p>A React dApp built on <code>@solana/wallet-adapter-react</code> connects desktop wallets
without trouble, but on a phone the same flow falls apart: the wallet has to
open the dApp inside its own in-app browser, and the deep links that should
make that happen quietly do not. Backpack lands on a &ldquo;download the app&rdquo; page;
Solflare opens the app but never the site; every variant seems to fail. We took
the problem apart, and it turned out to be four separate problems wearing one
symptom.</p>
<h2 id="the-four-problems">The four problems</h2>

<ul>
<li><strong>The Backpack link was malformed.</strong> The only documented format is
<code>https://backpack.app/ul/v1/browse/&lt;url&gt;?ref=&lt;ref&gt;</code> — a universal link with
the target URL in the path and a required <code>ref</code>. A custom-scheme guess like
<code>backpack://ul/v1/browse?url=...</code> matches no route the app registers, so the
user ends on the wallet&rsquo;s install page.</li>
<li><strong>Solflare needs its universal link too:</strong>
<code>https://solflare.com/ul/v1/browse/&lt;url&gt;?ref=&lt;ref&gt;</code>, not the bare
<code>solflare://</code> scheme. A bare scheme can launch the app without routing it —
which is exactly &ldquo;the app opens, but the site tab has to be opened by hand&rdquo;.</li>
<li><strong>Both parameters must be encoded.</strong> <code>url</code> is the full absolute dApp address
and <code>ref</code> is the requesting origin, each passed through <code>encodeURIComponent</code>.
An unencoded <code>?</code> or <code>&amp;</code> in the target corrupts the parse, and the wallet
opens on its home screen instead of the browser tab.</li>
<li><strong>The trigger matters as much as the link.</strong> Universal links only switch apps
on a navigation the operating system trusts — and they deliberately do
nothing when pasted into the address bar, which is also how a perfectly
correct link &ldquo;fails&rdquo; during testing.</li>
</ul>
<h2 id="the-documented-formats">The documented formats</h2>

<ul>
<li>Phantom: <code>https://phantom.app/ul/browse/&lt;url&gt;?ref=&lt;ref&gt;</code> — no <code>/v1</code> in this
one.</li>
<li>Solflare: <code>https://solflare.com/ul/v1/browse/&lt;url&gt;?ref=&lt;ref&gt;</code></li>
<li>Backpack: <code>https://backpack.app/ul/v1/browse/&lt;url&gt;?ref=&lt;ref&gt;</code></li>
</ul>
<p>One pattern serves all three:</p>
<pre tabindex="0"><code>const WALLET_BROWSE = {
  phantom: (url, ref) =&gt;
    `https://phantom.app/ul/browse/${url}?ref=${ref}`,
  solflare: (url, ref) =&gt;
    `https://solflare.com/ul/v1/browse/${url}?ref=${ref}`,
  backpack: (url, ref) =&gt;
    `https://backpack.app/ul/v1/browse/${url}?ref=${ref}`,
};

function walletBrowseLink(
  walletName,
  targetUrl = window.location.href,
) {
  const build = WALLET_BROWSE[walletName.toLowerCase()];
  if (!build) return null;
  return build(
    encodeURIComponent(targetUrl),
    encodeURIComponent(window.location.origin),
  );
}
</code></pre><h2 id="triggering-the-link-so-ios-and-android-accept-it">Triggering the link so iOS and Android accept it</h2>

<ul>
<li><strong>Render a real anchor, precomputed.</strong> A plain
<code>&lt;a href={walletBrowseLink('phantom')}&gt;</code> is the most reliable trigger on both
platforms.</li>
<li><strong>If it must be programmatic</strong>, assign <code>window.location.href</code> synchronously
inside the tap handler — no <code>await</code>, no <code>fetch</code>, no <code>setTimeout</code> first. After
asynchronous work the gesture context is gone, and iOS falls back to the
wallet&rsquo;s website. Never <code>window.open</code>.</li>
<li><strong>Never test by pasting into the address bar.</strong> Universal links deliberately
do not fire there; test with a tapped link or a QR code scanned by the
camera.</li>
<li><strong>Mind the messenger webviews.</strong> Opened inside Telegram&rsquo;s or Instagram&rsquo;s
in-app browser, universal links are frequently swallowed and the wallet&rsquo;s
plain website loads instead. User-agent detection is heuristic at best, so
also give users a visible escape hatch: &ldquo;open in Safari or Chrome, then
connect&rdquo;.</li>
</ul>
<h2 id="the-bigger-fix-on-android">The bigger fix on Android</h2>

<p>Hand-rolled deep links are the iOS story. On Android, Solana Mobile&rsquo;s Mobile
Wallet Adapter lets a dApp running in the mobile browser connect straight to
the installed wallet app, with no in-app-browser detour at all. Recent versions
of <code>@solana/wallet-adapter-react</code> register the mobile adapter automatically, so
upgrading the wallet-adapter packages can fix Android by itself. The target
architecture: Mobile Wallet Adapter on Android, browse universal links on iOS,
where Apple allows no equivalent.</p>
<h2 id="verifying-on-a-device">Verifying on a device</h2>

<ol>
<li>Real device, wallet installed, link opened from the system browser — not
from a messenger.</li>
<li>Tap a rendered link or scan a QR code; never paste into the address bar.</li>
<li>Confirm the wallet opens and the dApp loads in its in-app browser tab — the
second half is the part that fails.</li>
<li>Repeat without the wallet installed: the universal link should degrade to
the wallet&rsquo;s website. That page appearing while the app is installed means
the link or the trigger is still wrong.</li>
<li>Then test the messenger path, and add the &ldquo;open in browser&rdquo; hint if it
fails there.</li>
</ol>
<h2 id="sources">Sources</h2>

<ul>
<li><a href="https://docs.phantom.com/phantom-deeplinks/deeplinks-ios-and-android">Phantom: deep links on iOS and Android</a></li>
<li><a href="https://docs.solflare.com/solflare/technical/deeplinks/other-methods/browse">Solflare: the Browse deep link</a></li>
<li><a href="https://docs.backpack.app/deeplinks/other-methods/browse">Backpack: the Browse deep link</a></li>
<li><a href="https://docs.solanamobile.com/mobile-wallet-adapter/mobile-apps">Solana Mobile: Mobile Wallet Adapter</a></li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
