Compare commits

..

2 Commits

Author SHA1 Message Date
MisterSoandSo
f85809ddf4 Update to new format 2026-04-27 23:30:52 -07:00
MisterSoandSo
99e9f605e2 Initialize github.io backend
.nojekyll file is used in GitHub Pages to bypass the default Jekyll build process: Serving Files with Underscores.

CNAME : linking domain name to github.io page
2026-04-24 13:57:15 -07:00
15 changed files with 175 additions and 0 deletions

0
.nojekyll Normal file
View File

1
404.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" href="/acstech_favicon_angular_acs_v2.ico" sizes="any"><title>Oops! Not Found</title><link rel="stylesheet" href="/_astro/BaseLayout.CmXLcAZX.css"></head> <body class="bg-dark text-light d-flex flex-column min-vh-100"> <header id="site-header"> <nav class="navbar navbar-expand-md bg-body py-3" data-bs-theme="dark"> <div class="container"> <a class="navbar-brand d-flex align-items-center" href="/"> <span>ACSTechnology</span> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navcol-1" aria-controls="navcol-1" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navcol-1"> <ul class="navbar-nav ms-auto"> <li class="nav-item"><a class="nav-link" href="/about/">About</a></li> <li class="nav-item"><a class="nav-link" href="/blog/">The Lab</a></li> <li class="nav-item"><a class="nav-link" href="/projects/">Projects</a></li> <li class="nav-item"><a class="nav-link" href="/contact/">Contact</a></li> </ul> </div> </div> </nav> </header> <main> <section class="d-flex align-items-center justify-content-center" style="min-height: 60vh;"> <article class="bubble text-center" style="max-width: 700px; width: 100%;"> <h1>404</h1> <p><strong>Page not found</strong></p> <p>The page you requested could not be found. Let's get you back on track.</p> <p class="mb-0"> <a href="/" class="btn btn-primary">Go to the homepage</a> </p> </article> </section> </main> <footer id="site-footer" class="bg-body mt-auto" data-bs-theme="dark"> <div class="container py-4 py-lg-5"> <div class="row text-center text-md-start gy-4"> <!-- Column 1: Brand / Copyright --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start justify-content-center"> <p class="fw-semibold mb-1">ACSTechnology</p> <p class="text-body-secondary mb-0 small">Built with curiosity and caffeine</p> <p class="text-body-secondary mb-0 small">&copy; 2026</p> </div> <!-- Column 2: Resources --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Resources</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/faq/">FAQ</a></li> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/privacy/">Privacy</a></li> <li><a class="link-body-emphasis text-decoration-none" href="/terms/">Terms</a></li> </ul> </div> <!-- Column 3: Development --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Development</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="text-decoration-none" href="https://git.acstech.dev">Gitea</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://github.com/ACSTechDev">GitHub</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://www.linkedin.com/company/acstechdev">LinkedIn (Company)</a></li> <li><a class="text-decoration-none" href="https://www.linkedin.com/in/andrew-chiang-so/">LinkedIn (Founder)</a></li> </ul> </div> </div> </div> </footer> <script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.GtM1sxkV.js"></script> </body> </html>

1
CNAME Normal file
View File

@@ -0,0 +1 @@
acstech.dev

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

24
about/index.html Normal file
View File

@@ -0,0 +1,24 @@
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" href="/acstech_favicon_angular_acs_v2.ico" sizes="any"><title>About | ACSTechnology</title><link rel="stylesheet" href="/_astro/BaseLayout.CmXLcAZX.css"></head> <body class="bg-dark text-light d-flex flex-column min-vh-100"> <header id="site-header"> <nav class="navbar navbar-expand-md bg-body py-3" data-bs-theme="dark"> <div class="container"> <a class="navbar-brand d-flex align-items-center" href="/"> <span>ACSTechnology</span> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navcol-1" aria-controls="navcol-1" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navcol-1"> <ul class="navbar-nav ms-auto"> <li class="nav-item"><a class="nav-link" href="/about/">About</a></li> <li class="nav-item"><a class="nav-link" href="/blog/">The Lab</a></li> <li class="nav-item"><a class="nav-link" href="/projects/">Projects</a></li> <li class="nav-item"><a class="nav-link" href="/contact/">Contact</a></li> </ul> </div> </div> </nav> </header> <main> <article class="bubble bubble-left"> <h1>About ACSTechnology</h1> <p>
ACSTechnology is a founder-led software business based in Southern California.
I help small businesses and teams build custom software when off-the-shelf tools
dont quite fit — whether thats internal tools, automations, or client-facing systems.
</p> </article> <article class="bubble bubble-right"> <h2>What I Build</h2> <ul> <li>Custom web applications tailored to your workflow</li> <li>Backend APIs and system integrations</li> <li>Automation tools to reduce manual work</li> <li>AI-assisted tools for internal or client-facing use</li> </ul> </article> <article class="bubble bubble-left"> <h2>Who I Work With</h2> <ul> <li>Private organizations needing secure, domain-specific AI tools for internal workflows</li> <li>Small businesses outgrowing spreadsheets or manual processes</li> <li>Teams that need internal tools or automation</li> <li>Clients replacing or extending tools like Jotform, Airtable, or similar platforms</li> </ul> </article> <article class="bubble bubble-right"> <h2>What You Can Expect</h2> <ul> <li>Clear communication — no disappearing mid-project</li> <li>Practical solutions, not over-engineered systems</li> <li>Maintainable code you can work with after handoff</li> <li>A transparent and structured development process</li> </ul> </article> <article class="bubble bubble-left"> <h2>How I Work</h2> <p>
I focus on building systems that solve real problems and remain maintainable long after launch.
The goal isnt just to ship software — its to build something you can rely on.
</p> <p>
Development happens in the open where it makes sense. Public work is mirrored on GitHub,
while private projects are handled in a controlled, self-hosted environment to protect
client data and maintain clear separation from public code.
</p> </article> <article class="bubble bubble-right"> <h2>When Im Not the Right Fit</h2> <p>
If an off-the-shelf tool already solves your problem cleanly, Ill usually recommend that instead.
My work is best suited for cases where existing tools fall short, need to be extended,
or dont align well with your workflow.
</p> </article> <article class="bubble bubble-left"> <h2>About Me</h2> <p>
I'm Andrew, a developer focused on building practical, maintainable systems for real-world use.
</p> <p>
I started ACSTechnology to work directly with clients who need software that fits their workflow —
not the other way around.
</p> <p>
I tend to work best with people who already understand their problem and want a reliable,
long-term solution rather than a quick patch.
</p> </article> </main> <footer id="site-footer" class="bg-body mt-auto" data-bs-theme="dark"> <div class="container py-4 py-lg-5"> <div class="row text-center text-md-start gy-4"> <!-- Column 1: Brand / Copyright --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start justify-content-center"> <p class="fw-semibold mb-1">ACSTechnology</p> <p class="text-body-secondary mb-0 small">Built with curiosity and caffeine</p> <p class="text-body-secondary mb-0 small">&copy; 2026</p> </div> <!-- Column 2: Resources --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Resources</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/faq/">FAQ</a></li> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/privacy/">Privacy</a></li> <li><a class="link-body-emphasis text-decoration-none" href="/terms/">Terms</a></li> </ul> </div> <!-- Column 3: Development --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Development</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="text-decoration-none" href="https://git.acstech.dev">Gitea</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://github.com/ACSTechDev">GitHub</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://www.linkedin.com/company/acstechdev">LinkedIn (Company)</a></li> <li><a class="text-decoration-none" href="https://www.linkedin.com/in/andrew-chiang-so/">LinkedIn (Founder)</a></li> </ul> </div> </div> </div> </footer> <script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.GtM1sxkV.js"></script> </body> </html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

11
blog/index.html Normal file
View File

@@ -0,0 +1,11 @@
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" href="/acstech_favicon_angular_acs_v2.ico" sizes="any"><title>ACS Technology Blog</title><link rel="stylesheet" href="/_astro/BaseLayout.CmXLcAZX.css">
<style>.blog-hero{background:linear-gradient(135deg,#0d6efd,#6610f2);margin-bottom:2rem;padding-left:1rem;padding-right:1rem}.blog-meta{color:#ffffffc7}.blog-description{max-width:760px;color:#ffffffe6}.blog-article-wrap{max-width:900px;margin:0 auto;padding:0 1rem 3rem}.blog-article{background-color:#161b22;border:1px solid #30363d;border-radius:1.25rem;padding:2rem;color:#c9d1d9;line-height:1.75;box-shadow:0 8px 20px #00000059}.blog-article p{margin:1rem 0}.blog-article h2,.blog-article h3,.blog-article h4{margin-top:2rem;margin-bottom:1rem;color:#79c0ff}.blog-article a{color:#58a6ff}.blog-article pre{background:#0d1117;border:1px solid #30363d;border-radius:.75rem;padding:1rem;overflow-x:auto}.blog-article code{font-family:Consolas,Monaco,Courier New,monospace}.blog-article blockquote{margin:1.5rem 0;padding-left:1rem;border-left:3px solid #58a6ff;color:#e6edf3}.blog-article img{max-width:100%;height:auto;border-radius:.75rem}.blog-article ul,.blog-article ol{padding-left:1.5rem;margin:1rem 0}.blog-list-wrap{max-width:900px;margin:0 auto;padding:0 1rem 3rem}.blog-list-card{background-color:#161b22;border:1px solid #30363d;border-radius:1rem;padding:1.25rem 1.5rem;margin-bottom:1rem;box-shadow:0 6px 18px #00000040}.blog-list-card h2,.blog-list-card h3{margin-top:0;margin-bottom:.5rem}.blog-list-card p{margin-bottom:.5rem}.blog-list-meta{color:#8b949e;font-size:.95rem}@media(max-width:700px){.blog-article{padding:1.25rem}.blog-hero{padding-top:4rem;padding-bottom:3rem}}
</style></head> <body class="bg-dark text-light d-flex flex-column min-vh-100"> <header id="site-header"> <nav class="navbar navbar-expand-md bg-body py-3" data-bs-theme="dark"> <div class="container"> <a class="navbar-brand d-flex align-items-center" href="/"> <span>ACSTechnology</span> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navcol-1" aria-controls="navcol-1" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navcol-1"> <ul class="navbar-nav ms-auto"> <li class="nav-item"><a class="nav-link" href="/about/">About</a></li> <li class="nav-item"><a class="nav-link" href="/blog/">The Lab</a></li> <li class="nav-item"><a class="nav-link" href="/projects/">Projects</a></li> <li class="nav-item"><a class="nav-link" href="/contact/">Contact</a></li> </ul> </div> </div> </nav> </header> <main> <header class="text-center py-5 bg-gradient rounded-bottom blog-hero"> <h1 class="display-4 fw-bold">Welcome to the Lab</h1> <p class="lead mx-auto" style="max-width: 750px;">
ACSTechnology is just me - plus the occasional hand from family and friends.
This blog isn't about marketing fluff or corporate updates. It's a running log
of what I'm learning while building real software and a business from the ground up.
Most posts will focus on software engineering, with a few exploring the business side.
Expect a mix of deep-dive tutorials, brutally honest rants, and everything in between.
</p> <p class="lead mx-auto" style="max-width: 750px;">
Bookmark it or follow on YouTube, whichever you prefer.
</p> </header> <section class="blog-list-wrap"> <h2 id="recent-posts" class="mb-4 border-bottom pb-2">Recent posts</h2> <article class="blog-list-card"> <h2 class="h4"> <a href="/blog/regex-extractor/" class="link-info text-decoration-none"> Regex Link Extractor </a> </h2> <p>A lightweight Chrome extension for extracting links, images, and videos from any page using regex filters. Built for manual browsing and bulk collection — with a handy side effect of feeding clean data into LLM workflows. This article walks through the why, the build, and what comes next.</p> <div class="blog-list-meta"> <time datetime="2026-04-27T00:00:00.000Z"> April 26, 2026 </time> <span> · Chrome Extension, 1.0.0, Regex, JavaScript, LLM, Json</span> </div> </article> </section> </main> <footer id="site-footer" class="bg-body mt-auto" data-bs-theme="dark"> <div class="container py-4 py-lg-5"> <div class="row text-center text-md-start gy-4"> <!-- Column 1: Brand / Copyright --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start justify-content-center"> <p class="fw-semibold mb-1">ACSTechnology</p> <p class="text-body-secondary mb-0 small">Built with curiosity and caffeine</p> <p class="text-body-secondary mb-0 small">&copy; 2026</p> </div> <!-- Column 2: Resources --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Resources</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/faq/">FAQ</a></li> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/privacy/">Privacy</a></li> <li><a class="link-body-emphasis text-decoration-none" href="/terms/">Terms</a></li> </ul> </div> <!-- Column 3: Development --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Development</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="text-decoration-none" href="https://git.acstech.dev">Gitea</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://github.com/ACSTechDev">GitHub</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://www.linkedin.com/company/acstechdev">LinkedIn (Company)</a></li> <li><a class="text-decoration-none" href="https://www.linkedin.com/in/andrew-chiang-so/">LinkedIn (Founder)</a></li> </ul> </div> </div> </div> </footer> <script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.GtM1sxkV.js"></script> </body> </html>

View File

@@ -0,0 +1,85 @@
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" href="/acstech_favicon_angular_acs_v2.ico" sizes="any"><title>Regex Link Extractor | ACSTechnology</title><link rel="stylesheet" href="/_astro/BaseLayout.CmXLcAZX.css">
<style>.blog-hero{background:linear-gradient(135deg,#0d6efd,#6610f2);margin-bottom:2rem;padding-left:1rem;padding-right:1rem}.blog-meta{color:#ffffffc7}.blog-description{max-width:760px;color:#ffffffe6}.blog-article-wrap{max-width:900px;margin:0 auto;padding:0 1rem 3rem}.blog-article{background-color:#161b22;border:1px solid #30363d;border-radius:1.25rem;padding:2rem;color:#c9d1d9;line-height:1.75;box-shadow:0 8px 20px #00000059}.blog-article p{margin:1rem 0}.blog-article h2,.blog-article h3,.blog-article h4{margin-top:2rem;margin-bottom:1rem;color:#79c0ff}.blog-article a{color:#58a6ff}.blog-article pre{background:#0d1117;border:1px solid #30363d;border-radius:.75rem;padding:1rem;overflow-x:auto}.blog-article code{font-family:Consolas,Monaco,Courier New,monospace}.blog-article blockquote{margin:1.5rem 0;padding-left:1rem;border-left:3px solid #58a6ff;color:#e6edf3}.blog-article img{max-width:100%;height:auto;border-radius:.75rem}.blog-article ul,.blog-article ol{padding-left:1.5rem;margin:1rem 0}.blog-list-wrap{max-width:900px;margin:0 auto;padding:0 1rem 3rem}.blog-list-card{background-color:#161b22;border:1px solid #30363d;border-radius:1rem;padding:1.25rem 1.5rem;margin-bottom:1rem;box-shadow:0 6px 18px #00000040}.blog-list-card h2,.blog-list-card h3{margin-top:0;margin-bottom:.5rem}.blog-list-card p{margin-bottom:.5rem}.blog-list-meta{color:#8b949e;font-size:.95rem}@media(max-width:700px){.blog-article{padding:1.25rem}.blog-hero{padding-top:4rem;padding-bottom:3rem}}
</style></head> <body class="bg-dark text-light d-flex flex-column min-vh-100"> <header id="site-header"> <nav class="navbar navbar-expand-md bg-body py-3" data-bs-theme="dark"> <div class="container"> <a class="navbar-brand d-flex align-items-center" href="/"> <span>ACSTechnology</span> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navcol-1" aria-controls="navcol-1" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navcol-1"> <ul class="navbar-nav ms-auto"> <li class="nav-item"><a class="nav-link" href="/about/">About</a></li> <li class="nav-item"><a class="nav-link" href="/blog/">The Lab</a></li> <li class="nav-item"><a class="nav-link" href="/projects/">Projects</a></li> <li class="nav-item"><a class="nav-link" href="/contact/">Contact</a></li> </ul> </div> </div> </nav> </header> <main> <header class="text-center py-5 bg-gradient rounded-bottom blog-hero"> <h1 class="display-4 fw-bold mb-2">Regex Link Extractor</h1> <p class="blog-meta mb-2"> <time datetime="2026-04-27T00:00:00.000Z">April 26, 2026</time> </p> <p class="blog-description mx-auto">A lightweight Chrome extension for extracting links, images, and videos from any page using regex filters. Built for manual browsing and bulk collection — with a handy side effect of feeding clean data into LLM workflows. This article walks through the why, the build, and what comes next.</p> <div class="blog-tags mt-3"> <span class="badge rounded-pill text-bg-dark me-2">Chrome Extension</span><span class="badge rounded-pill text-bg-dark me-2">1.0.0</span><span class="badge rounded-pill text-bg-dark me-2">Regex</span><span class="badge rounded-pill text-bg-dark me-2">JavaScript</span><span class="badge rounded-pill text-bg-dark me-2">LLM</span><span class="badge rounded-pill text-bg-dark me-2">Json</span> </div> </header> <section class="blog-article-wrap flex-grow-1"> <article class="blog-article"> <h2 id="introduction">Introduction</h2>
<p>Sometimes youre browsing a page and you want everything on it — every PDF link, every image
from a specific domain, every video URL — without opening DevTools or writing a scraper.
Thats what this extension is for.</p>
<p>It started as a personal tool for manual browsing and bulk collection. Type a regex, hit
extract, get a clean filtered list of links, images, or videos you can download or save.</p>
<p>The LLM angle came later, almost by accident. The JSON export format turned out to be
exactly what youd want to paste into a model prompt — structured, typed, with page context
included. Thats a nice bonus, but its not why the extension exists.</p>
<h2 id="why-build-the-extension">Why build the extension</h2>
<p>The idea came from a simple frustration. When Im browsing I often want to bulk-collect
something from a page — all the download links, all the images from a specific source, all
the external URLs — and theres no good lightweight tool for it. DevTools works but its
overkill and verbose. Writing a one-off script works but takes time.</p>
<p>What I wanted was a popup: type a pattern, see matching assets, grab what I need. No server,
no authentication, no data leaving the browser.</p>
<p>Building it as a Chrome extension was the obvious fit. It runs entirely client-side, has
direct access to the page DOM, and stays out of the way until you need it.</p>
<h2 id="initial-design">Initial Design</h2>
<p>The extension has three files at its core: manifest.json, popup.html, and popup.js.
Manifest (MV3)</p>
<p>The extension uses Manifest V3, Chromes current extension standard. The only permissions
required are activeTab — which grants temporary access to the current tab when the user
opens the popup — and scripting, which allows injecting the extraction function into the
page context. No broad host permissions, no background data collection.</p>
<p><b>Extraction logic</b></p>
<p>The core of the extension is a single function, extractPageAssets, that gets injected into
the active tab via chrome.scripting.executeScript. It queries the DOM for three asset types:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>&#x3C;a href> — links, with their visible text trimmed to 50 characters</span></span>
<span class="line"><span>&#x3C;img src> — images, with alt text carried through</span></span>
<span class="line"><span>&#x3C;video> and child &#x3C;source> elements — since most modern players put the real URL</span></span>
<span class="line"><span>on a &#x3C;source> tag rather than the &#x3C;video> element itself</span></span></code></pre>
<p>All three are filtered by the users regex pattern, deduplicated by URL, and returned as
a structured payload with the page title, source URL, and a timestamp.</p>
<p><b>Why regex?</b></p>
<p>Regex gives you precision without a UI for every use case. Want all YouTube links? <code>youtube.com</code>.
Want only PDFs? <code>\.pdf</code>. Want links from a specific subdomain? You write the pattern. It keeps
the tool small and hands control to the user — which also makes it a natural pairing with an LLM,
since you can ask the model to write the pattern for you if youre unsure.</p>
<p>If youve never written a regex before, <a href="https://www.regex101.com">regex101.com</a>
is the best place to start — paste a pattern and some test URLs and it explains exactly what
each part does. Make sure the flavor is set to JavaScript, which is what the extension uses.</p>
<p><b>Export formats </b></p>
<p>Results can be exported as JSON (structured, with full metadata) or Markdown (a clean linked
list, useful for dropping straight into a document or LLM prompt). Both are generated entirely
in the browser using a blob URL — no server involved, no upload.</p>
<h2 id="usage-instructions">Usage Instructions</h2>
<p><b>For everyday users</b></p>
<ol>
<li>Install the extension from the Chrome Web Store</li>
<li>Navigate to any page you want to extract from</li>
<li>Click the extension icon in your toolbar</li>
<li>Type a pattern into the regex field — for example, youtube.com to find YouTube links, or leave it broad with . to match everything</li>
<li>Click Find Links</li>
<li>Check or uncheck individual results, use Select All / Deselect All as needed</li>
<li>Choose your export format (JSON or Markdown) and which asset types to include</li>
<li>Click Download</li>
</ol>
<p><b>For developers using it as an LLM feed</b></p>
<p>The JSON export is designed to be pasted directly into a model prompt. It includes the source
URL, page title, timestamp, and a typed array of items — each with a url, type, and either
text (for links) or alt / poster (for images and videos). A prompt like:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>Here is a JSON list of links extracted from a documentation page. </span></span>
<span class="line"><span>Identify which ones are likely API reference pages versus guides.</span></span></code></pre>
<p>…works well out of the box with the exported format. The Markdown export is better suited for
summarisation tasks or when you want the model to reason about link text rather than raw URLs.</p>
<h2 id="future-plans">Future plans</h2>
<p>A few things on the roadmap:</p>
<ul>
<li><b>Right-click context menu</b> — right-clicking a link or image on any page will pre-fill
the regex field with a pattern derived from that URL, so you can immediately find similar assets</li>
<li><b>Regex history</b> — remember the last few patterns used, selectable from a dropdown</li>
<li><b>CSV export</b> — a third format option for tabular workflows and spreadsheet tools</li>
<li><b>Pattern library</b> — a small set of one-click presets for common cases (PDFs, images,
YouTube, external links)</li>
</ul>
<h2 id="closing">Closing</h2>
<p>The extension is small by design. It does one thing — gets assets off a page fast — and
stays out of your way otherwise. If you regularly find yourself manually hunting down links
or bulk-saving resources while browsing, its worth a try. And if you happen to use an LLM
for content work, the export format will slot straight in.</p>
<p>The full source is available on <a href="https://www.github.com/ACSTechDev/Regex-Link-Extractor">GitHub.com</a>. If you run into a bug or have a feature request,
open an issue — I read them.</p> </article> </section> </main> <footer id="site-footer" class="bg-body mt-auto" data-bs-theme="dark"> <div class="container py-4 py-lg-5"> <div class="row text-center text-md-start gy-4"> <!-- Column 1: Brand / Copyright --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start justify-content-center"> <p class="fw-semibold mb-1">ACSTechnology</p> <p class="text-body-secondary mb-0 small">Built with curiosity and caffeine</p> <p class="text-body-secondary mb-0 small">&copy; 2026</p> </div> <!-- Column 2: Resources --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Resources</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/faq/">FAQ</a></li> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/privacy/">Privacy</a></li> <li><a class="link-body-emphasis text-decoration-none" href="/terms/">Terms</a></li> </ul> </div> <!-- Column 3: Development --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Development</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="text-decoration-none" href="https://git.acstech.dev">Gitea</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://github.com/ACSTechDev">GitHub</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://www.linkedin.com/company/acstechdev">LinkedIn (Company)</a></li> <li><a class="text-decoration-none" href="https://www.linkedin.com/in/andrew-chiang-so/">LinkedIn (Founder)</a></li> </ul> </div> </div> </div> </footer> <script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.GtM1sxkV.js"></script> </body> </html>

6
contact/index.html Normal file
View File

@@ -0,0 +1,6 @@
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" href="/acstech_favicon_angular_acs_v2.ico" sizes="any"><title>Contact | ACSTechnology</title><link rel="stylesheet" href="/_astro/BaseLayout.CmXLcAZX.css"></head> <body class="bg-dark text-light d-flex flex-column min-vh-100"> <header id="site-header"> <nav class="navbar navbar-expand-md bg-body py-3" data-bs-theme="dark"> <div class="container"> <a class="navbar-brand d-flex align-items-center" href="/"> <span>ACSTechnology</span> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navcol-1" aria-controls="navcol-1" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navcol-1"> <ul class="navbar-nav ms-auto"> <li class="nav-item"><a class="nav-link" href="/about/">About</a></li> <li class="nav-item"><a class="nav-link" href="/blog/">The Lab</a></li> <li class="nav-item"><a class="nav-link" href="/projects/">Projects</a></li> <li class="nav-item"><a class="nav-link" href="/contact/">Contact</a></li> </ul> </div> </div> </nav> </header> <main> <article class="bubble bubble-left"> <h1>Contact</h1> <p>
Have a project in mind or need help building something custom?
Send a message and Ill take a look.
</p> <p>
For questions or inquiries, please contact:
<a href="mailto:contact@acstech.dev">contact@acstech.dev</a> </p> </article> <article class="bubble bubble-right"> <h2>Get in Touch</h2> <form class="contact-form" method="post" action="#"> <div class="mb-3"> <label class="form-label" for="name">Name</label> <input class="form-control" id="name" name="name" placeholder="John Doe" type="text"> </div> <div class="mb-3"> <label class="form-label" for="email">Email</label> <input class="form-control" id="email" name="email" placeholder="jdoe@example.com" type="email"> </div> <div class="mb-3"> <label class="form-label" for="message">Message</label> <textarea class="form-control" id="message" name="message" placeholder="Type your inquiry here..." rows="6"></textarea> </div> <button class="btn btn-primary" type="submit">Send</button> </form> </article> </main> <footer id="site-footer" class="bg-body mt-auto" data-bs-theme="dark"> <div class="container py-4 py-lg-5"> <div class="row text-center text-md-start gy-4"> <!-- Column 1: Brand / Copyright --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start justify-content-center"> <p class="fw-semibold mb-1">ACSTechnology</p> <p class="text-body-secondary mb-0 small">Built with curiosity and caffeine</p> <p class="text-body-secondary mb-0 small">&copy; 2026</p> </div> <!-- Column 2: Resources --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Resources</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/faq/">FAQ</a></li> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/privacy/">Privacy</a></li> <li><a class="link-body-emphasis text-decoration-none" href="/terms/">Terms</a></li> </ul> </div> <!-- Column 3: Development --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Development</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="text-decoration-none" href="https://git.acstech.dev">Gitea</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://github.com/ACSTechDev">GitHub</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://www.linkedin.com/company/acstechdev">LinkedIn (Company)</a></li> <li><a class="text-decoration-none" href="https://www.linkedin.com/in/andrew-chiang-so/">LinkedIn (Founder)</a></li> </ul> </div> </div> </div> </footer> <script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.GtM1sxkV.js"></script> </body> </html>

16
index.html Normal file
View File

@@ -0,0 +1,16 @@
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" href="/acstech_favicon_angular_acs_v2.ico" sizes="any"><title>ACS Technology</title><link rel="stylesheet" href="/_astro/BaseLayout.CmXLcAZX.css"></head> <body class="bg-dark text-light d-flex flex-column min-vh-100"> <header id="site-header"> <nav class="navbar navbar-expand-md bg-body py-3" data-bs-theme="dark"> <div class="container"> <a class="navbar-brand d-flex align-items-center" href="/"> <span>ACSTechnology</span> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navcol-1" aria-controls="navcol-1" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navcol-1"> <ul class="navbar-nav ms-auto"> <li class="nav-item"><a class="nav-link" href="/about/">About</a></li> <li class="nav-item"><a class="nav-link" href="/blog/">The Lab</a></li> <li class="nav-item"><a class="nav-link" href="/projects/">Projects</a></li> <li class="nav-item"><a class="nav-link" href="/contact/">Contact</a></li> </ul> </div> </div> </nav> </header> <main> <article class="bubble bubble-left"> <h1>Introduction</h1> <p>
ACSTechnology is a founder-led software business based in Southern California.
I help small businesses, entrepreneurs, and growing teams turn ideas into working
software - whether that means a custom web app, process automation, backend systems,
or AI-powered tools. The focus is always the same: build something useful, dependable,
and worth using long after launch.
</p> </article> <article class="bubble bubble-right"> <h2>Mission Statement</h2> <p>
At ACSTechnology, my mission is simple - to build software that actually solves
problems. I work closely with each client to understand their goals and create
custom solutions that fit their business, not the other way around. Every
project gets my full attention, from the first idea to the final delivery,
ensuring a smooth process and a result you'll be proud to launch.
</p> </article> <article class="bubble bubble-left"> <h3>Areas of Focus</h3> <p>
At ACSTechnology, we combine practical software engineering with the latest in
AI to help small teams do more with less. Our core focus areas include:
</p> <ul> <li><strong>Custom Software Development</strong> - Scalable web and desktop apps built around your workflow.</li> <li><strong>AI Integration &amp; Automation</strong> - From chatbots to workflow automation, we help you bring intelligent features into your products or internal tools.</li> <li><strong> Backend Engineering</strong> - Fast, secure, and maintainable backend systems designed to handle real-world growth.</li> <li><strong> Web App Development</strong> - Modern, responsive interfaces that feel fast, clean, and intuitive for your users.</li> <li><strong> Tech Consulting &amp; Prototyping</strong> - Need to validate an idea before building it? We'll help you design, test, and launch efficiently.</li> </ul> </article> <article class="bubble bubble-right"> <h2>Why Work With Us</h2> <ul> <li><strong>Founder-led attention.</strong> You'll work directly with me - no handoffs or endless layers of management.</li> <li><strong>Clear communication.</strong> You'll always know where things stand, what's next, and when to expect results.</li> <li><strong>Quality over quantity.</strong> I take on a limited number of projects to deliver real focus and care.</li> </ul> <blockquote><strong>Let's turn your idea into something real.</strong></blockquote> </article> </main> <footer id="site-footer" class="bg-body mt-auto" data-bs-theme="dark"> <div class="container py-4 py-lg-5"> <div class="row text-center text-md-start gy-4"> <!-- Column 1: Brand / Copyright --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start justify-content-center"> <p class="fw-semibold mb-1">ACSTechnology</p> <p class="text-body-secondary mb-0 small">Built with curiosity and caffeine</p> <p class="text-body-secondary mb-0 small">&copy; 2026</p> </div> <!-- Column 2: Resources --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Resources</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/faq/">FAQ</a></li> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/privacy/">Privacy</a></li> <li><a class="link-body-emphasis text-decoration-none" href="/terms/">Terms</a></li> </ul> </div> <!-- Column 3: Development --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Development</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="text-decoration-none" href="https://git.acstech.dev">Gitea</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://github.com/ACSTechDev">GitHub</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://www.linkedin.com/company/acstechdev">LinkedIn (Company)</a></li> <li><a class="text-decoration-none" href="https://www.linkedin.com/in/andrew-chiang-so/">LinkedIn (Founder)</a></li> </ul> </div> </div> </div> </footer> <script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.GtM1sxkV.js"></script> </body> </html>

3
projects/index.html Normal file
View File

@@ -0,0 +1,3 @@
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" href="/acstech_favicon_angular_acs_v2.ico" sizes="any"><title>Projects | ACSTechnology</title><link rel="stylesheet" href="/_astro/BaseLayout.CmXLcAZX.css">
<style>.projects-hero[data-astro-cid-2hwget37]{padding:3rem 0 2rem;border-bottom:1px solid rgba(255,255,255,.08);margin-bottom:3rem}.projects-hero[data-astro-cid-2hwget37] h1[data-astro-cid-2hwget37]{font-size:clamp(2rem,5vw,3.25rem);font-weight:700;letter-spacing:-.02em;line-height:1.1}.projects-hero[data-astro-cid-2hwget37] p[data-astro-cid-2hwget37]{max-width:520px;opacity:.65}.projects-grid[data-astro-cid-2hwget37]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem;padding-bottom:4rem}.project-card[data-astro-cid-2hwget37]{background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:12px;overflow:hidden;display:flex;flex-direction:column;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;animation:fadeUp .4s ease both}.project-card[data-astro-cid-2hwget37]:hover{transform:translateY(-4px);box-shadow:0 12px 40px #0006;border-color:#ffffff2e}.project-card__image[data-astro-cid-2hwget37]{width:100%;aspect-ratio:16 / 9;object-fit:cover;display:block;background:#ffffff0f}.project-card__body[data-astro-cid-2hwget37]{padding:1.25rem 1.25rem .75rem;flex:1;display:flex;flex-direction:column;gap:.5rem}.project-card__title[data-astro-cid-2hwget37]{font-size:1.1rem;font-weight:600;margin:0}.project-card__title[data-astro-cid-2hwget37] a[data-astro-cid-2hwget37]{color:#fff;text-decoration:none}.project-card__title[data-astro-cid-2hwget37] a[data-astro-cid-2hwget37]:hover{text-decoration:underline;text-underline-offset:3px}.project-card__desc[data-astro-cid-2hwget37]{font-size:.875rem;color:#fff9;margin:0;line-height:1.55;flex:1}.project-card__tags[data-astro-cid-2hwget37]{display:flex;flex-wrap:wrap;gap:.375rem;padding:.75rem 1.25rem}.tag[data-astro-cid-2hwget37]{font-size:.7rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:.2rem .55rem;border-radius:4px;background:#ffffff14;color:#ffffffb3;border:1px solid rgba(255,255,255,.1)}.project-card__links[data-astro-cid-2hwget37]{display:flex;gap:.75rem;align-items:center;padding:.75rem 1.25rem 1.25rem;border-top:1px solid rgba(255,255,255,.07)}.project-card__link[data-astro-cid-2hwget37]{font-size:.8rem;font-weight:500;text-decoration:none;display:inline-flex;align-items:center;gap:.3rem;color:#ffffff8c;transition:color .15s ease}.project-card__link[data-astro-cid-2hwget37]:hover{color:#fff}.project-card__link--primary[data-astro-cid-2hwget37]{color:#60a5fa}.project-card__link--primary[data-astro-cid-2hwget37]:hover{color:#93c5fd}.project-card__link--readmore[data-astro-cid-2hwget37]{margin-left:auto}.project-card[data-astro-cid-2hwget37]:nth-child(1){animation-delay:.05s}.project-card[data-astro-cid-2hwget37]:nth-child(2){animation-delay:.12s}.project-card[data-astro-cid-2hwget37]:nth-child(3){animation-delay:.19s}.project-card[data-astro-cid-2hwget37]:nth-child(4){animation-delay:.26s}.project-card[data-astro-cid-2hwget37]:nth-child(5){animation-delay:.33s}.project-card[data-astro-cid-2hwget37]:nth-child(6){animation-delay:.4s}@keyframes fadeUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
</style></head> <body class="bg-dark text-light d-flex flex-column min-vh-100"> <header id="site-header"> <nav class="navbar navbar-expand-md bg-body py-3" data-bs-theme="dark"> <div class="container"> <a class="navbar-brand d-flex align-items-center" href="/"> <span>ACSTechnology</span> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navcol-1" aria-controls="navcol-1" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navcol-1"> <ul class="navbar-nav ms-auto"> <li class="nav-item"><a class="nav-link" href="/about/">About</a></li> <li class="nav-item"><a class="nav-link" href="/blog/">The Lab</a></li> <li class="nav-item"><a class="nav-link" href="/projects/">Projects</a></li> <li class="nav-item"><a class="nav-link" href="/contact/">Contact</a></li> </ul> </div> </div> </nav> </header> <main> <div class="container" data-astro-cid-2hwget37> <div class="projects-hero" data-astro-cid-2hwget37> <h1 data-astro-cid-2hwget37>Projects</h1> <p class="mt-2 mb-0" data-astro-cid-2hwget37>A selection of things I've built — from side experiments to tools I actually use.</p> </div> <p class="text-secondary" data-astro-cid-2hwget37>No public projects yet.</p> </div> </main> <footer id="site-footer" class="bg-body mt-auto" data-bs-theme="dark"> <div class="container py-4 py-lg-5"> <div class="row text-center text-md-start gy-4"> <!-- Column 1: Brand / Copyright --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start justify-content-center"> <p class="fw-semibold mb-1">ACSTechnology</p> <p class="text-body-secondary mb-0 small">Built with curiosity and caffeine</p> <p class="text-body-secondary mb-0 small">&copy; 2026</p> </div> <!-- Column 2: Resources --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Resources</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/faq/">FAQ</a></li> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/privacy/">Privacy</a></li> <li><a class="link-body-emphasis text-decoration-none" href="/terms/">Terms</a></li> </ul> </div> <!-- Column 3: Development --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Development</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="text-decoration-none" href="https://git.acstech.dev">Gitea</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://github.com/ACSTechDev">GitHub</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://www.linkedin.com/company/acstechdev">LinkedIn (Company)</a></li> <li><a class="text-decoration-none" href="https://www.linkedin.com/in/andrew-chiang-so/">LinkedIn (Founder)</a></li> </ul> </div> </div> </div> </footer> <script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.GtM1sxkV.js"></script> </body> </html>

View File

@@ -0,0 +1,15 @@
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="icon" href="/acstech_favicon_angular_acs_v2.ico" sizes="any"><title>Regex Link Extractor - Privacy Policy</title><link rel="stylesheet" href="/_astro/BaseLayout.CmXLcAZX.css"></head> <body class="bg-dark text-light d-flex flex-column min-vh-100"> <header id="site-header"> <nav class="navbar navbar-expand-md bg-body py-3" data-bs-theme="dark"> <div class="container"> <a class="navbar-brand d-flex align-items-center" href="/"> <span>ACSTechnology</span> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navcol-1" aria-controls="navcol-1" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navcol-1"> <ul class="navbar-nav ms-auto"> <li class="nav-item"><a class="nav-link" href="/about/">About</a></li> <li class="nav-item"><a class="nav-link" href="/blog/">The Lab</a></li> <li class="nav-item"><a class="nav-link" href="/projects/">Projects</a></li> <li class="nav-item"><a class="nav-link" href="/contact/">Contact</a></li> </ul> </div> </div> </nav> </header> <main> <article class="bubble bubble-left"> <h1>Privacy Policy</h1> <p>Effective Date: April 27, 2026</p> <p> <b>Regex Link Extractor</b> is a client-side browser extension. It does not collect, store,
or transmit any personal data. All processing happens locally in your browser.
</p> </article> <article class="bubble bubble-left"> <h2>Permissions</h2> <p>The extension requests the following permissions:</p> <ul> <li><b>activeTab</b>: Accesses the content of the current tab only when you explicitly activate the extension.</li> <li><b>scripting</b>: Runs the extraction script within the active tab to identify links, images, and videos.</li> </ul> <p>No other permissions are requested or used.</p> </article> <article class="bubble bubble-left"> <h2>How It Works</h2> <p>
When you click "Find Links", the extension injects a script into the active tab to scan
its content using your regex pattern. Matching links, images, and videos are displayed
in the popup. Nothing leaves your browser during this process.
</p> <p>
If you choose to export results, the file is generated entirely in your browser and saved
directly to your device. No data is uploaded or transmitted to any server at any point.
</p> </article> <article class="bubble bubble-left"> <h2>Data Handling</h2> <ul> <li><b>Collection</b>: No personal data, browsing history, or user activity is collected.</li> <li><b>Storage</b>: No data is stored locally or remotely by the extension.</li> <li><b>Transmission</b>: The extension makes no external network requests.</li> <li><b>Sharing</b>: No data is shared with third parties.</li> <li><b>Analytics</b>: No tracking, analytics, or telemetry of any kind is included.</li> </ul> </article> <article class="bubble bubble-left"> <h2>Changes to This Policy</h2> <p>
This policy may be updated to reflect changes in functionality or legal requirements.
Any updates will be reflected with a revised effective date at the top of this page.
</p> </article> <article class="bubble bubble-left"> <h2>Contact</h2> <p>
For questions or concerns about this privacy policy, please contact:
<a href="mailto:support@acstech.dev">support@acstech.dev</a> </p> </article> </main> <footer id="site-footer" class="bg-body mt-auto" data-bs-theme="dark"> <div class="container py-4 py-lg-5"> <div class="row text-center text-md-start gy-4"> <!-- Column 1: Brand / Copyright --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start justify-content-center"> <p class="fw-semibold mb-1">ACSTechnology</p> <p class="text-body-secondary mb-0 small">Built with curiosity and caffeine</p> <p class="text-body-secondary mb-0 small">&copy; 2026</p> </div> <!-- Column 2: Resources --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Resources</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/faq/">FAQ</a></li> <li class="mb-1"><a class="link-body-emphasis text-decoration-none" href="/privacy/">Privacy</a></li> <li><a class="link-body-emphasis text-decoration-none" href="/terms/">Terms</a></li> </ul> </div> <!-- Column 3: Development --> <div class="col-12 col-md-4 d-flex flex-column align-items-center align-items-md-start"> <small class="text-uppercase text-body-secondary mb-2">Development</small> <ul class="list-unstyled mb-0"> <li class="mb-1"><a class="text-decoration-none" href="https://git.acstech.dev">Gitea</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://github.com/ACSTechDev">GitHub</a></li> <li class="mb-1"><a class="text-decoration-none" href="https://www.linkedin.com/company/acstechdev">LinkedIn (Company)</a></li> <li><a class="text-decoration-none" href="https://www.linkedin.com/in/andrew-chiang-so/">LinkedIn (Founder)</a></li> </ul> </div> </div> </div> </footer> <script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.GtM1sxkV.js"></script> </body> </html>

2
robots.txt Normal file
View File

@@ -0,0 +1,2 @@
User-agent: *
Allow: /