Releases: luozongbao/myapis
Release list
Current Release: Version 2.6.3.1
Current Release: Version 2.6.3.1
Release Date: September 3, 2026
Status: Stable Release
📈 Version 2.6.3.1 - About Popup - Release Note Link
Released: September 3, 2026
🌟 Highlights
- Release note link — switched from in-repo
RELEASE.md
to the GitHub Project release page.
📦 Release page:
https://github.com/luozongbao/myapis/releases/
Current Release: Version 2.6.3
Current Release: Version 2.6.3
Release Date: September 3, 2026
Status: Stable Release
📈 Version 2.6.3 - About Popup & README Cleanup
Released: September 3, 2026
🌟 Highlights
- New About popup — a beautiful modal that shows the
current MyAPIs version (loaded from a single source of truth),
a short project description, six feature highlights, and
quick links to GitHub, the release notes and the author's
blog - Single-source version metadata in
public/includes/version.php—
bumps only need to be made once and they propagate to every
page that renders the About popup (homepage + all 7 tool
pages) data-open-abouttrigger — any element with the
data-open-aboutattribute opens the popup; the homepage
exposes it under the status badge (ℹ️ About MyAPIs) and
every page exposes it through the footer (ℹ️ About)- Accessibility built-in —
role="dialog",aria-modal,
aria-labelledby, Escape-to-close, backdrop click-to-close,
and a small focus-trap so keyboard users stay inside the
modal while it is open - Responsive — on screens ≤ 480 px the feature list stacks
to a single column and the action buttons wrap to multiple
rows - Rendered once per request — guarded by the
MYAPIS_ABOUT_POPUP_RENDEREDconstant inside the footer
partial, so even if multiple pagesincludethe footer the
popup markup /<style>/<script>only appears once
🔧 How It Works
A new shared partial lives at
public/includes/about_popup.php
and is automatically appended by the footer partial. It
expects (or requires on demand)
public/includes/version.php:
$MYAPIS_VERSION = [
'version' => '2.6.3',
'codename' => 'About Popup',
'released' => '2026-09-03',
];To bump the version, edit public/includes/version.php —
nothing else needs to change. The popup reads the array and
renders both the gradient version pill (v2.6.3 · About Popup)
and the released date automatically.
To add a new trigger anywhere on the site, just add the
data-open-about attribute:
<a href="#" data-open-about>ℹ️ About</a>
<button data-open-about>What's this?</button>The popup closes when the user clicks the close button, the
backdrop, or presses Escape.
📁 Updated Files
public/includes/version.php— new single-source
version metadata (version,codename,released)public/includes/about_popup.php— new About popup
partial (HTML + scoped CSS + JS open/close behaviour,
focus trap, Escape handler)public/includes/footer.php— appends the popup partial
(guarded byMYAPIS_ABOUT_POPUP_RENDERED) and adds a new
ℹ️ Aboutlink withdata-open-aboutpublic/index.php— adds an extraℹ️ About MyAPIslink
under the status badge for first-visit discoverabilityREADME.md— removed the in-README version / changelog
sections (Latest Updates v2.5.0, v2.4.0, v2.3.x, v2.0.0);
a one-liner now points readers at this fileRELEASE.md— bumped current release pointer to 2.6.3
✅ Verification
- All four PHP files (
version.php,about_popup.php,
footer.php,index.php) passphp -l ℹ️ Aboutlink confirmed in the footer of every page
(homepage + 7 tool pages)ℹ️ About MyAPIslink confirmed on the homepage, sitting
just below the✅ All Systems Operationalbadge- Popup opens via both triggers, closes via the close
button, backdrop click, andEscape - Keyboard tab order stays inside the modal while it is open
- No duplicate popup markup when multiple pages include the
footer in the same request (constant guard) - No backend / API changes; existing endpoints unaffected
📈 Version 2.6.2 - Unified Site Footer
Released: September 3, 2026
🌟 Highlights
- Shared footer across every page — the homepage and all
seven tool pages (fortune-teller,health-calculator,
password-generator,promptpay-qr-generator,
qr-code-generator,randomizer,username-generator)
now render the same footer via a single partial, so links
and copyright stay consistent everywhere - New Blog link to https://atipat.lorwongam.com — sits
alongside the GitHub repository link and opens in a new tab - Dead anchor links removed —
#documentation,#api-status
and#support(which had no targets on the homepage) are
gone; only meaningful links remain in the footer - Two style variants (
glass/simple) so the footer
looks right on the gradient homepage and on the lighter,
opaque-container tool pages - Responsive — links stack vertically on narrow screens
(≤ 600 px)
🔧 How It Works
A new shared partial lives at
public/includes/footer.php.
It accepts an optional $footer_variant variable:
'glass'(default) — translucent card with white text and
a#ffd700hover, designed for the gradient homepage'simple'— lighter styling for tool pages that already
have their own opaque background container
Each tool page simply sets the variant and includes the
partial right before </body>:
<?php $footer_variant = 'simple'; ?>
<?php include __DIR__ . '/../includes/footer.php'; ?>CSS is emitted inline by the partial itself, so the existing
inline <style> blocks in each tool page don't need any
changes. The homepage keeps using the old .footer class names
intact in public/assets/css/index.css for backwards
compatibility — the new partial just supersedes them.
📁 Updated Files
public/includes/footer.php— new shared footer
partial (glass+simplevariants, responsive)public/index.php— replaces inline.footermarkup with
includeof the partial (glassvariant)public/tools/fortune-teller.php— includes partial
(simplevariant)public/tools/health-calculator.php— includes partial
(simplevariant)public/tools/password-generator.php— includes partial
(simplevariant)public/tools/promptpay-qr-generator.php— includes
partial (simplevariant)public/tools/qr-code-generator.php— includes partial
(simplevariant)public/tools/randomizer.php— includes partial
(simplevariant)public/tools/username-generator.php— includes partial
(simplevariant)README.md— bumped current release pointer to 2.6.2
✅ Verification
- All eight pages (
public/index.php+ 7 tools) confirmed to
render exactly one footer instance — no duplicate footers - Footer links (GitHub + Blog) verified to open in a new tab
withrel="noopener noreferrer" - Blog link points to
https://atipat.lorwongam.com - Responsive layout verified: links switch from row to column
at ≤ 600 px viewport width - No backend / API changes; existing endpoints unaffected
Current Release: Version 2.6.1
Current Release: Version 2.6.1
Release Date: September 2, 2026
Status: Stable Release
📈 Version 2.6.1 - vCard Name Dropdown Coordination
Released: September 2, 2026
🌟 Highlights
- No-duplicate vCard name parts in the QR Code Generator —
the five name-part types (First / Middle / Last / Prefix /
Suffix) now share a single pool so the same type can't be
picked twice across multiple name rows - Auto-restore on removal — when a name row is deleted (or
its type is changed), the freed-up type automatically becomes
available in every other row's dropdown again - Smart default for new rows — adding a new name row picks
the first enabled type from the pool instead of always
defaulting tofirst_name, so users see the next sensible
choice pre-selected - Pure-client-side, zero backend impact — coordination
happens entirely in the existing inline<script>block of
public/tools/qr-code-generator.php; no new files, no API
changes, no schema changes
🔧 How It Works
The vCard Name section now keeps the five type options in
a canonical pool (NAME_TYPES) on the client. Each row's
<select> is tagged with data-name-type-select, and a single
syncNameSelects() function rebuilds the options of every
name-row select whenever:
- the page first loads
- a name row is added (
+ Add another name part) - a name row is removed (
✕) - the user picks a different type in any row
Options that are already in use elsewhere are rendered
<option disabled> so they remain visible (for context) but
cannot be chosen. The select belonging to the row that already
holds the type keeps it enabled and selected.
When the user clicks + Add another name part, the handler
reads the types currently in use, picks the first entry from
NAME_TYPES that isn't taken, and sets it as the new row's
value before running the sync — so the default is always the
next sensible, still-enabled type.
📁 Updated Files
public/tools/qr-code-generator.php- Server-rendered name
<select>now carries
data-name-type-select - JS template for newly-added name rows emits the same
attribute - New
NAME_TYPESpool +syncNameSelects()function + Add another name parthandler chooses the first free
type as the default for the new row✕ Removehandler triggerssyncNameSelects()so
freed-up options reappear- Delegated
changelistener keeps every dropdown in sync
when a user changes type manually
- Server-rendered name
✅ Verification
- Manual smoke test on
public/tools/qr-code-generator.php:- Row 1 =
first_name→ Row 2's dropdown showsfirst_name
as a disabled option - Add Row 3 → defaults to
middle_name(first free type) - Change Row 2 to
prefix→ Row 1 + Row 3 dropdowns disable
prefix - Delete Row 1 →
first_namebecomes enabled again in Rows 2
and 3
- Row 1 =
- Sticky-form behaviour preserved — on a POST submission that
re-renders the form,syncNameSelects()runs on init so any
duplicate selections from a malicious payload would be
re-coordinated (and the resulting POSTed values stay as the
user already typed them) - No backend / API changes; existing payloads still validate
unchanged
Current Release: Version 2.6.0
Current Release: Version 2.6.0
Release Date: September 2, 2026
Status: Stable Release
📈 Version 2.6.0 - Security Layer (Rate Limit + Headers + HMAC)
Released: September 2, 2026
🌟 Highlights
- Defence-in-depth security layer for the entire stack —
rate limiting, response-header hardening, abuse detection,
optional API-key + HMAC signing — all implemented in pure
PHP, no Composer / Redis / Memcached required - Sliding-window rate limiter with per-IP and per-API-key
bucketing, auto-ban on abuse, and millisecond resolution state
persisted in tiny JSON files (storage/ratelimit/) - Nginx-level rate limits + connection caps + buffer
hardening + an optional HTTPS server block template - Backwards-compatible — every existing endpoint continues
to work; security features default to safe values
🌟 New Features
🚦 RateLimiter.php — Sliding-Window Rate Limiter (file-backed)
api/includes/security/RateLimiter.php
- Sliding-window algorithm with millisecond resolution
- Per-bucket state files (SHA-1 of
(route, identity)) at
storage/ratelimit/bucket__<sha1>.json - Atomic writes via
flock(LOCK_EX)+ temp file +rename() - Per-IP bucket by default; per-API-key bucket when the caller
sends anX-API-Keyheader - Auto-ban when a bucket accumulates too many failures
(SECURITY_FAIL_LIMIT/SECURITY_BAN_WINDOWenv vars,
default 10 failures → 5 minute ban) - HTTP 429 response with:
X-RateLimit-Limit/X-RateLimit-Remaining/X-RateLimit-ResetRetry-After(seconds)- JSON body
{"success":false,"error":"Too many requests",...}
- Optional global bucket (
RATELIMIT_GLOBAL_LIMIT/
RATELIMIT_GLOBAL_WINDOW) that counts every hit across all
routes for a single identity - Garbage-collection helper (
RateLimiter::gc()) for stale
buckets — wired into a cron-friendly command line entry point
🛡️ Security.php — Defensive Headers, Input Sanitisation, HMAC
api/includes/security/Security.php
Security::sendHeaders()emits a full suite of defensive
response headers idempotently:X-Content-Type-Options: nosniffX-Frame-Options: SAMEORIGINX-XSS-Protection: 1; mode=blockReferrer-Policy: strict-origin-when-cross-originPermissions-Policy: geolocation=(), microphone=(), camera=(), payment=()Strict-Transport-Security(only emitted when TLS is
configured)
Security::safeString()/safeInt()/safeEnum()— typed
coercion with bounds, regex whitelist, and null-byte strippingSecurity::containsMalicious()— pattern probe for SQL
injection, path traversal, XSS, shell injection and PHP
injection probesSecurity::enforceJson()— caps JSON body size (default
64 KiB) and nesting depth (default 8)Security::generateApiKey()— cryptographically secure API
key generatorSecurity::hmac()/verifyHmac()— constant-time signature
comparison viahash_equalsSecurity::clientFingerprint()— SHA-1 of IP + UA + Accept +
Accept-Language (useful for forensics / additional rate
buckets)
🪝 Bootstrap Helpers
New helpers wired into every endpoint:
api_security_init()— reads.env, configures the
RateLimiteronce per request (static-cached)api_rate_limit($bucket, $policy)— the main entry point
called by every endpoint right after the preflightapi_rate_limit_fail($bucket)— explicit failure counter
(e.g. for failed signature verification)api_safe_json_body()— JSON body validator that returns
nullon overflow / invalid depthapi_verify_signature()— HMAC verifier with optional
algorithm choice (sha256/sha512)api_unauthorized($reason)— emits a 401 JSON response and
exits cleanly
⚙️ Per-Tool Rate-Limit Policies
| Endpoint | Limit | Window |
|---|---|---|
randomizer, fortune-teller |
120 / min | 60 s |
password-generator, username-generator, health-calculator |
60 / min | 60 s |
qr-code-generator, promptpay-qr-generator |
30 / min | 60 s |
Override any of them via RATELIMIT_DEFAULT_LIMIT /
RATELIMIT_DEFAULT_WINDOW env vars, or edit
api_config.php directly. Heavier endpoints (QR generators)
get a tighter budget because they call out to goQR.me or do
heavy image rendering.
🌐 Nginx Hardening
limit_conn_zone+limit_req_zonemoved to the top-level
http {}context (the only place nginx accepts them)/api/location now applies:limit_req zone=myapis_req burst=60 nodelay— request
rate cap with a 60-request burstlimit_conn myapis_conn 20— concurrent connection cap
client_max_body_size,client_header_buffer_size,
large_client_header_buffers,client_body_timeout,
client_header_timeout— buffer hardening against
slowloris / large-header DoS- Direct access to
api_config.phpis now blocked - Commented-out HTTPS server block template with HSTS —
ready to uncomment when TLS certificates are mounted
🐳 Docker / Storage Provisioning
docker/entrypoint.shnow provisions
/var/www/myapis-storage/ratelimit/and
/var/www/myapis-storage/logs/with correct ownership
(www-data:www-data,0775)docker-compose.ymladds two persistent named volumes:myapis-ratelimit→ rate-limit state filesmyapis-logs→ application logs
- All security env vars are forwarded to the
phpservice
(SECURITY_ENABLED,RATELIMIT_DEFAULT_LIMIT,
RATELIMIT_DEFAULT_WINDOW,RATELIMIT_GLOBAL_LIMIT,
RATELIMIT_GLOBAL_WINDOW,SECURITY_FAIL_LIMIT,
SECURITY_BAN_WINDOW,SECURITY_BLACKLIST,
SECURITY_WHITELIST,TRUST_CF_CONNECTING_IP,
TRUST_X_FORWARDED_FOR,TRUSTED_PROXIES,
RATELIMIT_STORAGE_DIR,MYAPIS_LOG_DIR)
📝 Configuration Surface (example.env)
New documented variables (all optional, all safe-by-default):
SECURITY_ENABLED— global kill-switch (defaulttrue)RATELIMIT_DEFAULT_LIMIT/RATELIMIT_DEFAULT_WINDOW
— defaults for every endpoint (60 / 60 s)RATELIMIT_GLOBAL_LIMIT/RATELIMIT_GLOBAL_WINDOW
— global abuse cap (e.g. 1000 / 60 s)SECURITY_FAIL_LIMIT/SECURITY_BAN_WINDOW— auto-ban
thresholds (10 failures → 300 s ban)SECURITY_BLACKLIST/SECURITY_WHITELIST— comma-
separated CIDR / IP listsTRUST_CF_CONNECTING_IP— readCF-Connecting-IP
(Cloudflare)TRUST_X_FORWARDED_FOR— readX-Forwarded-Forwhen
the request comes from a trusted proxyTRUSTED_PROXIES— CIDR allowlist for proxy trustRATELIMIT_STORAGE_DIR/MYAPIS_LOG_DIR— runtime
paths
🔒 Optional HMAC Request Signing
if (!api_verify_signature('YOUR_SHARED_SECRET', 'sha256', true)) {
api_unauthorized('Invalid signature');
}Clients send the hex digest of the request body in the
X-Signature header. Constant-time comparison via
hash_equals() prevents timing attacks.
🌍 Reverse-Proxy / Cloudflare Awareness
When the stack sits behind Cloudflare or another trusted proxy,
the rate limiter buckets by the real client IP instead of the
proxy IP:
TRUST_CF_CONNECTING_IP=true
# or
TRUST_X_FORWARDED_FOR=true
TRUSTED_PROXIES=10.0.0.0/8,172.16.0.0/12Do not enable these flags without listing your proxy IPs
in TRUSTED_PROXIES — otherwise clients can spoof their IP
via the X-Forwarded-For header.
📚 Documentation
- New 🔒 Security section in
README.md— covers rate limiting, headers,
input validation, nginx hardening, HMAC, whitelist /
blacklist, reverse-proxy trust, and the global kill switch - README Latest Updates bumped to v2.6.0
RELEASE.md— this entry
📁 New / Updated Files
New files
api/includes/security/RateLimiter.php— sliding-window
limiterapi/includes/security/Security.php— defensive headers,
input helpers, HMACapi/includes/api_config.php— per-tool rate-limit policiesstorage/ratelimit/— runtime bucket state (git-ignored)storage/logs/— runtime app logs (git-ignored)
Updated files
api/includes/bootstrap.php— security init + new helpersapi/password-generator/index.php— addsapi_rate_limit()api/username-generator/index.php— addsapi_rate_limit()api/randomizer/index.php— addsapi_rate_limit()api/fortune-teller/index.php— addsapi_rate_limit()api/health-calculator/index.php— addsapi_rate_limit()api/qr-code-generator/index.php— addsapi_rate_limit()api/promptpay-qr-generator/index.php— adds
api_rate_limit()docker/nginx/default.conf— rate limits, connection caps,
buffer hardening, blockedapi_config.php, HTTPS templatedocker/entrypoint.sh— provisionratelimit/andlogs/docker-compose.yml— persistent volumes + security env vars.gitignore— excludestorage/example.env— full security configuration documentationREADME.md— new 🔒 Security section, Latest Updates bump
✅ Verification
php -lpasses for every modified PHP file (all 7 endpoints,
bootstrap.php,api_config.php, bothsecurity/*.php
files)- Live HTTP smoke tests against the running stack:
- Every API endpoint returns
X-RateLimit-*and
Retry-Afterheaders Permissions-Policy,X-Frame-Options, etc. are present
in the response- Request #119 of
/api/randomizer/returns
HTTP 429 withRetry-After: 47,X-RateLimit-Remaining: 0
and the ex...
- Every API endpoint returns
Current Release: Version 2.5.0
Current Release: Version 2.5.0
Release Date: September 2, 2026
Status: Stable Release
📈 Version 2.5.0 - Dynamic vCard Fields & Shared-Hosting Deployment
Released: September 2, 2026
🌟 Highlights
- Dynamic vCard builder for the QR Code Generator — add/remove
unlimited name variants, nicknames, emails with custom
types (WORK/HOME/INTERNET), and phones with custom
types (CELL,VOICE/WORK,VOICE/HOME,VOICE/FAX/VOICE) - Shared-hosting deployment guide for Hostinger / cPanel /
SiteGround / Namecheap withpublic/config.phpanalytics fallback - Pluggable visitor tracking (Umami + GA4) extended with a
shared-hosting-friendlyconfig.phpfallback and shipped in
every public page - Single-source env configuration via
example.envtracked in
the repo for Docker / production deployments
🌟 New Features
📇 QR Code Generator — Dynamic vCard Name & Contact Types
- Dynamic name fields
(api/qr-code-generator/index.php,
public/qr-code-generator.php):- Add/remove unlimited structured names (
formatted,
prefix,first,middle,last,suffix) — each rendered
in the right order in the generated vCard - Optional
kindselector (Individual/Organisation/
Group) so the same UI works for personal and business cards
- Add/remove unlimited structured names (
- Dynamic nickname fields
- Add/remove unlimited
nickname[]entries rendered as
NICKNAME:nick1,nick2,...
- Add/remove unlimited
- Dynamic email types
- Each row now carries its own
typedropdown
(WORK/HOME/INTERNET) instead of a single hard-coded
prefix - Backward-compatible: legacy
work_email/home_emailfields
still accepted when no dynamic rows are present
- Each row now carries its own
- Dynamic phone types
- Each row now carries its own
typedropdown
(CELL,VOICE/WORK,VOICE/HOME,VOICE/FAX/VOICE) - Backward-compatible: legacy
work_phone/home_phone/
cell_phone/faxfields still accepted
- Each row now carries its own
- Backend collection helper (
collectDynamicItems()):- Reads both
$_GETand$_POST - Re-indexes dynamic rows server-side so missing/empty entries
do not break the vCard output - Merges with legacy single fields so existing API consumers are
unaffected
- Reads both
📘 Per-Tool README Migration
- Moved the QR Code Generator documentation into
api/qr-code-generator/README.md
so the API folder is self-describing - Removed the legacy
docs/nginx-conf/*.confand
docs/requirements/myapi-2.0.mdfiles — they were stale and are
now superseded by the Shared Hosting Deployment guide in the
project root README
⚙️ Environment Configuration
- Tracked
example.env: ships a fully-commented
copy of every environment variable the stack understands (ports,
PHP limits, timezone, analytics provider, Umami / GA4
credentials). Update.gitignoreso it does not exclude the
example file —.envitself remains git-ignored.
📈 Analytics: Shared-Hosting Fallback
- New
public/analytics.phppartial:- Mirrors the Docker
analytics.phpsnippet logic so non-Docker
/ shared-hosting deployments get the same tracking output - Tries to
require_oncepublic/config.php(orconfig.php
next to the partial) before reading env vars — shared
hosting providers that do not support.envor
auto_prepend_filecan still configure analytics - JSON / API responses are still excluded automatically
- Mirrors the Docker
public/config.php.example: copy /
edit template that callsputenv()for Umami or GA4- Every page under
public/now includes
public/analytics.phpso the snippet is
present on every tool page without manual edits
🌐 Shared-Hosting Deployment (Hostinger / cPanel) Guide
- Brand-new 🌐 Shared Hosting Deployment section in
README.md:- Prerequisites table (PHP version, extensions,
mod_rewrite) - Two project-layout strategies (upload only
public/+api/,
or the whole repo) with a recommended Hostinger Single / Premium
layout - hPanel upload walkthrough (File Manager / FTP / SSH)
- PHP version + extension enablement on hPanel / MultiPHP Manager
- Analytics without
.env— drop apublic/config.phpthat
callsputenv()(shared-hosting fallback) - File-permissions cheat sheet (644 / 755)
- Two clean domain-mapping strategies (root-repo upload vs.
public/-only upload with separateapi/folder) - Verification
curlcommands - Troubleshooting table (403, 500, missing
gd, 404 on/api/,
blank QR images, etc.) - Hosting-specific notes for Hostinger Single / Premium / Business
/ Cloud, SiteGround, Namecheap, and Cloudflare - "What you do not get on shared hosting" honest checklist
- Prerequisites table (PHP version, extensions,
📁 New / Updated Files
api/qr-code-generator/index.php— dynamic vCard collectionapi/qr-code-generator/README.md— moved per-tool docs herepublic/qr-code-generator.php— dynamic name / nickname / email
type / phone type UIpublic/analytics.php— new shared-hosting analytics partialpublic/config.php.example— new shared-hosting analytics
templatepublic/*.php(every tool) — includeanalytics.phppublic/api-specs/*.php— includeanalytics.phpexample.env— now tracked (no longer git-ignored).gitignore— exclude only.env, notexample.envdocker/php/analytics.php— read shared-hostingconfig.phpfirstREADME.md— new Shared Hosting Deployment section, env table
update, Latest Updates bumpRELEASE.md— this entry- Removed
docs/nginx-conf/lab01.conf…lab04.conf - Removed
docs/requirements/myapi-2.0.md
✅ Verification
php -lpasses for every modified PHP file- QR Code Generator vCard output verified end-to-end via Docker:
- Multiple structured names render in the expected order
- Multiple nicknames collapse into a single
NICKNAME:line - Email / phone types appear with the chosen prefixes
- Analytics:
curl -s http://localhost:8080/ | grep -E 'umami|gtag'→
returns the matching<script>tag when enabledcurl -s http://localhost:8080/api/health-calculator/ | grep -E 'umami|gtag'
→ returns nothing (API paths are excluded)- On shared hosting: drop a
public/config.phpthat sets the
provider viaputenv(), hit any tool page, view-source, and
the matching<script>tag is present
example.envis committed,.envis still git-ignored
Current Release: Version 2.4.0
Current Release: Version 2.4.0
Release Date: August 29, 2026
Status: Stable Release
📈 Version 2.4.0 - Analytics & Visitor Tracking
Released: August 29, 2026
🌟 New Feature
📊 Pluggable Visitor Tracking
docker/php/analytics.php: new partial that emits the correct
<script>snippet based onANALYTICS_PROVIDERumami— self-hosted, cookie-less, works in Chinaga4(aliasgoogle) — Google Analytics 4 via gtag.jsnone(default) — nothing is emitted
auto_prepend_filedirective added to
docker/php/php.ini.tplso the snippet is
injected into every HTML response without touching the tool
pages individually- JSON safety: the snippet is automatically skipped when:
- The request path starts with
/api/ - The
Acceptheader containsapplication/json - The script is invoked from the CLI
- The request path starts with
- Safe HTML: every dynamic value (
UMAMI_SCRIPT_URL,
UMAMI_WEBSITE_ID,GA4_MEASUREMENT_ID) is run through
htmlspecialchars()before being echoed
🐳 Optional Self-Hosted Umami Service
docker-compose.ymlnow ships a commented-out
umami-db+umamiservice block at the bottom (plus the matching
volumes:declaration)- Enable it with one edit to get Umami + PostgreSQL running next to
MyAPIs, accessible onhttp://localhost:${UMAMI_PORT:-3000} - Default login:
admin/umami
⚙️ Configuration Surface (example.env)
ANALYTICS_PROVIDER—none(default),umami,ga4,googleUMAMI_SCRIPT_URL— full URL to the Umami tracker
(http://umami:3000/script.jsworks out of the box when the
compose Umami service is enabled)UMAMI_WEBSITE_ID— UUID from the Umami dashboardGA4_MEASUREMENT_ID—G-XXXXXXXXXXfrom the GA4 admin- Existing Umami infra variables (
UMAMI_PORT,UMAMI_DB_*,
UMAMI_APP_SECRET) preserved and now documented in README
🐳 PHP Container Wiring
docker-compose.ymlforwardsANALYTICS_PROVIDER,
UMAMI_SCRIPT_URL,UMAMI_WEBSITE_ID,GA4_MEASUREMENT_IDto
thephpservice so the partial can read them viagetenv()
📚 Documentation
- New 📈 Analytics / Visitor Tracking section in
README.mdwith:- Provider comparison table
- Step-by-step Umami + GA4 setup instructions
- Tracking-scope clarification (HTML pages vs.
/api/*) - Verification
curlcommands
- README env-vars table extended with every analytics variable
- README Latest Updates bumped to v2.4.0
📁 New / Updated Files
docker/php/analytics.php— new tracking partialdocker/php/php.ini.tpl— addsauto_prepend_filedocker-compose.yml— adds analytics env forwarding + optional
Umami / PostgreSQL service blockexample.env— documentsANALYTICS_PROVIDER,UMAMI_SCRIPT_URL,
UMAMI_WEBSITE_ID,GA4_MEASUREMENT_IDREADME.md— new analytics section, env table, version bannerRELEASE.md— this entry
✅ Verification
php -l docker/php/analytics.phppassesdocker compose configvalidates with the optional Umami block
both commented and uncommented- Manual checks once running:
curl -s http://localhost:8080/ | grep -E 'umami|gtag'→ returns
the matching<script>tag when the provider is enabledcurl -s http://localhost:8080/api/health-calculator/ | grep -E 'umami|gtag'
→ returns nothing (API paths are excluded)
- Switching
ANALYTICS_PROVIDER=noneand restarting removes every
snippet without code changes
v.2.3.1
📋 MyAPIs Release Notes
Current Release: Version 2.3.1
Release Date: August 29, 2026
Status: Stable Release
📱 Version 2.3.1 - QR Code Generator: SVG, Color Pickers, Dynamic vCard
Released: August 29, 2026
🌟 Enhancements
📐 SVG File-Type Support
- New
file_typeparameter: Forwarded to goQR.me as theformatfield, validated
against['png', 'svg', 'gif', 'jpeg', 'jpg', 'eps'] - MIME-aware responses: SVG returns
image/svg+xml, PNGimage/png, etc. - Frontend dropdown: New "PNG / SVG" selector inside the Appearance panel
- Backward compatibility: Legacy
gformatparameter still accepted
🎨 Native Colour Pickers
- Replaced plain hex inputs with paired
<input type="color">+ hex text field
for both foreground (color) and background (bgcolor) - Live swatch preview next to each label
- Bi-directional sync: typing a hex value updates the picker and swatch instantly,
and picking a colour updates the hex text - No API changes: backend already accepted decimal RGB and 3/6-char hex values
📇 Dynamic vCard Fields
- Add/remove unlimited emails:
emails[i][value]+emails[i][type]
(WORK/HOME/INTERNET) - Add/remove unlimited phones:
phones[i][value]+phones[i][type]
(CELL,VOICE/WORK,VOICE/HOME,VOICE/FAX/VOICE) - Add/remove unlimited URLs:
urls[i][value]+ optionalurls[i][label] - Add/remove structured addresses:
addresses[i][type]+street+po_boxcity+region+postcode+country
reindex()JavaScript: keeps bracket numbers dense after row removalcollectDynamicItems()backend: reads both$_GETand$_POSTand merges
with legacy single fields (work_email,home_phone, etc.) for full
backward compatibility
📚 API Documentation Updates
- New parameter table: documents the array field patterns and accepted sub-keys
- Two new curl examples: SVG with custom colours (Example 8) and dynamic vCard
with multiple entries (Example 9) - Response example now includes the
file_typefield
🧪 Verification
- All three new features exercised via Docker stack (
docker compose up -d --build) - Direct PNG output: 300×300 with
cc0066foreground →image/png - Direct SVG output: 400×400 with
0066ccforeground →image/svg+xml - Wi-Fi + SVG + custom colour: payload
WIFI:T:WPA;S:Cafe WiFi;P:beans2024;H:false; - Dynamic vCard payload contains 3 emails, 3 phones, 2 URLs, 2 addresses
📱 Version 2.3.0 - QR Code Generator (Initial Release)
Released: August 29, 2026
🌟 Major New Feature
📱 Universal QR Code Generator
- Six content types powered by the goQR.me API:
- Plain Text / Long Text — any payload, no length restriction
- Website URL — auto-prefixes
https://when missing - Business vCard (vCard 3.0) — personal, organisational, contact, and address
fields including multiple emails, phones, fax, website and free-form note - Event (iCalendar) — summary, start, end, location, description
- Wi-Fi — SSID, password, encryption (WPA / WEP / nopass), hidden flag
- Phone Number —
tel:URI
- goQR.me parameter passthrough:
size,ecc,qzone,margin,color,
bgcolor,charset-source,charset-target,format - Two response modes:
format=image— raw PNG bytes (default goQR.me format)format=json—{success, type, payload, qr_url, goqr_url, params, file_type}
- CORS enabled for cross-origin consumption
- Validation: every input is whitelisted; unknown types / sizes / ECC
levels return HTTP 400 with a clear error message
🖥️ Web Interface
- Type selector grid — six cards (Text, URL, vCard, Event, Wi-Fi, Phone)
with icons and gradient active state - Sticky form: all simple fields repopulate after submission so users
can iteratively tweak - Payload preview: encoded payload is rendered below the QR image so
users can verify exactly what will be scanned - Breadcrumb + header badges matching the existing tool style
(#667eea → #764ba2gradient) - Download button: one-click download of the generated image with the
correct file extension
📚 API Specifications Page
public/api-specs/qr-code-generator.php— comprehensive table of
every parameter, accepted values, and defaults- Five external links to the goQR.me
create-qr-codedocumentation - Seven curl examples covering each content type and the direct image
download pattern - JSON response example with all fields shown
🧭 Navigation & Discoverability
- Landing page card (
public/index.php) — adds a "📱 QR Code Generator"
card with eight feature bullets and Try/API/Docs buttons - README.md tools table — adds the QR row linking to web UI, API, and specs
- Total tools: 7 (up from 6)
📁 New / Updated Files
api/qr-code-generator/index.php— REST endpointpublic/qr-code-generator.php— Web UIpublic/api-specs/qr-code-generator.php— API documentationpublic/index.php— landing page card addedREADME.md— tools table, project structure, statistics, usage examplesRELEASE.md— this file
✅ Verification
- PHP lint via
docker exec myapis-php php -l <file>passes for all three files - HTTP 200 on
http://localhost:8080/qr-code-generator.php - HTTP 200 on
http://localhost:8080/api-specs/qr-code-generator.php - HTTP 200 on
http://localhost:8080/api/qr-code-generator/?format=json(POST) - Each content type produces a standards-compliant payload:
- Text → raw string
- URL →
https://... - vCard →
BEGIN:VCARD ... END:VCARD - Event →
BEGIN:VCALENDAR ... END:VCALENDAR - Wi-Fi →
WIFI:T:WPA;S:<ssid>;P:<password>;H:<true|false>; - Phone →
tel:<number>
Version 2.1.2 - Username Generator Interface Cleanup & Generation
📋 MyAPIs Release Notes
Current Release: Version 2.1.2
Release Date: September 11, 2025
Status: Stable Release
🔧 Version 2.1.2 - Username Generator Interface Cleanup & Generation Improvements
Released: September 11, 2025
🧹 Interface Improvements
📝 Removed Unused Use Case Field
- Removed
use_caseparameter: Eliminated the unused "Use Case" dropdown from web interface - API Cleanup: Removed
use_casefrom API parameters and response data - Simplified Interface: Cleaner, more focused interface without confusing non-functional options
- Documentation Updated: Updated README.md to reflect parameter changes
- Backward Compatibility: Existing API calls will continue to work (parameter simply ignored)
⚡ Generation Algorithm Improvements
🎯 Smart Generation for Restrictive Constraints
- Intelligent Retry Logic: Dynamically adjusts maximum attempts based on length constraint difficulty
- Guaranteed Count: Now generates the full requested count of usernames when constraints allow
- Adaptive Scaling:
- Very restrictive constraints (≤5 char range): 50× more attempts
- Moderately restrictive (≤10 char range): 25× more attempts
- Normal constraints: 15× more attempts
- Warning System: Provides helpful warnings when constraints are too restrictive to generate full count
- Better User Experience: Users get the exact number of usernames they requested (when possible)
📚 Documentation Updates
- Parameter Documentation: Updated API parameter table to remove
use_case - Example Requests: Updated all code examples to exclude the removed parameter
- Response Examples: Updated JSON response examples without
use_casefield
🎯 Version 2.1.0 - Username Generator Enhanced Multi-Theme Support
Released: September 11, 2025
🌟 Major New Features
🎨 Multi-Theme Username Generation
- Multiple Theme Selection: Users can now select multiple themes simultaneously for more diverse username combinations
- 7 Comprehensive Themes: Updated theme collection with complete word lists:
- Fantasy: Epic, mythical usernames for gaming (Epic, Shadow, Warrior, Dragon, Wizard)
- Professional: Business and LinkedIn-ready usernames (Smart, Expert, Developer, Manager, Director)
- Science and Space: Space exploration and scientific terms (Stellar, Galaxy, Quantum, Atom, Einstein)
- Computer Technology: Programming and tech-focused (Digital, Algorithm, Framework, Docker, JavaScript)
- Elements and Chemistry: Chemistry and periodic elements (Hydrogen, Carbon, Molecular, Crystal, Plasma)
- Things: Everyday objects and items (Fork, Table, Chair, Lamp, Knife)
- Body and Health: Health and anatomy themed (Heart, Brain, Strong, Healthy, Muscle)
- Nature: Landscape fruits and animals (Mountain, Grape, Fox, Wolf, Banana)
- Space and Time: Usernames inspired by concepts of space and time (Metric, Meter, Hour, Space, Time, Centi)
🔧 Enhanced API Capabilities
- Multi-Theme Parameter: New
themesarray parameter allows combining multiple themes - Backward Compatibility: Legacy
themeparameter still supported for single-theme selection - GET Support: Multi-theme selection via comma-separated values in GET requests
- Enhanced Response: Generation info includes selected themes count and theme list
🖥️ Improved Web Interface
- Checkbox Theme Selection: Replaced dropdown with intuitive checkboxes for multi-theme selection
- Visual Theme Indicators: Better visual feedback for selected themes
- Multi-Theme Description: Helpful tooltips explaining multi-theme benefits
- Enhanced Results Display: Shows all selected themes in generation information
🛠️ Technical Improvements
📊 API Enhancements
- Flexible Input Handling: Supports both single theme and multiple themes in same API
- Improved Validation: Enhanced theme validation with specific error messages
- Word Deduplication: Automatic removal of duplicate words when combining themes
- Extended Word Lists: Added hundreds of new words across all theme categories
🌐 Web Interface Updates
- Dynamic Theme Loading: Themes loaded dynamically from API for consistency
- Improved JavaScript: Better error handling and form validation
- Enhanced UX: More intuitive multi-selection interface
- Responsive Design: Checkbox layout adapts to different screen sizes
📚 Documentation Updates
- Complete API Documentation: Updated all examples to show multi-theme usage
- New Use Cases: Added examples for science, chemistry, and health-themed usernames
- Backward Compatibility Guide: Clear migration path from single to multi-theme
- Enhanced README: Updated project documentation with new theme descriptions
� Version 2.0.1 - Major Architecture Restructuring
Released: September 10, 2025
🌟 Major Changes
🏗️ Complete Project Restructuring
- New Architecture: Reorganized from individual tool folders to clean
public/andapi/separation - Clean URLs: Beautiful, organized URL structure with
/public/for interfaces and/api/for endpoints - Enhanced Navigation: Streamlined access to tools, APIs, and documentation
- Better Organization: Logical separation of concerns for easier maintenance and deployment
�📚 Dynamic API Documentation System
- Server-Agnostic URLs: Documentation automatically adapts to any server domain using PHP
$_SERVERvariables - Centralized Documentation: All API specs moved to
public/api-specs/directory - Interactive Examples: Working code samples that use the current server's URL
- No More Hardcoded URLs: Eliminated hardcoded domain references throughout the project
🔧 API Accuracy Corrections
- Parameter Verification: All API documentation parameters verified against actual implementations
- Corrected Examples: Fixed numerous parameter name mismatches and incorrect examples
- Consistent Responses: Standardized response formats across all tools
- Updated Endpoints: All API endpoints updated to new
/api/tool-name/format
🐛 Bug Fixes
🌐 Web Interface Corrections
- Fixed API Calls: Updated all JavaScript fetch() calls to use correct API endpoints
- Navigation Fixes: Corrected all internal links to work with new structure
- Username Generator: Fixed API endpoint calls and response handling
- PromptPay QR Generator: Resolved API communication issues
- Random Generator: Fixed randomization API calls
- Fortune Teller: Resolved prediction file path issues
🔗 File Path Corrections
- Fortune Teller API: Fixed predictions directory path from
/../predictions/to/predictions/ - Asset Links: Updated all asset references to work with new structure
- Documentation Links: Corrected all cross-references between tools and docs
📁 New File Structure
myapis/
├── public/ # User-facing interfaces
│ ├── index.php # Main landing page
│ ├── *.php # Individual tool interfaces
│ └── api-specs/ # API documentation
├── api/ # Backend API implementations
│ └── */index.php # Individual API endpoints
├── README.md # Updated project documentation
└── RELEASE.md # This file
🔄 Breaking Changes
- URL Structure: All URLs changed from
/tool-name/to/public/tool-name.php - API Endpoints: All APIs moved from
/tool-name/api/to/api/tool-name/ - Documentation: API docs moved from
/tool-name/spec.phpto/public/api-specs/tool-name.php - Navigation: All internal links updated to reflect new structure
✅ Verification & Testing
- API Testing: All endpoints verified with curl and browser testing
- Web Interface Testing: All tools tested for functionality and user experience
- Documentation Accuracy: All examples and parameters verified against actual code
- Cross-Browser Testing: Verified compatibility across modern browsers
- Mobile Testing: Ensured responsive design works on all devices
🛠️ Technical Improvements
- Cleaner Architecture: Better separation of concerns between frontend and backend
- Easier Deployment: Simplified deployment with clear public/api structure
- Better Maintainability: More organized codebase for easier updates
- Enhanced Security: Improved input validation and error handling
- Performance: Optimized file structure for better loading times
💧 Version 1.3.1 - API Documentation Enhancement
Released: September 9, 2025
🌟 New Features
📖 Comprehensive API Documentation
- Interactive API Specs: Added
spec.phpfiles for all tools with comprehensive documentation - Enhanced Navigation: Added navigation links to API documentation from all web interfaces
- Consistent Design: Beautiful, responsive documentation pages with consistent styling
- Complete Examples: Detailed request/response examples for all API endpoints
- Error Documentation: Comprehensive error codes and troubleshooting guides
- Integration Examples: Code examples in multiple programming languages
🔗 Improved User Experience
- Main Interface Enhancement: Added "API Docs" buttons to all tool cards
- Tool Navigation: Added breadcrumb navigation and quick links to API resources
- Updated Project Structure: Documentation reflects new file organization
- Enhanced README: Updated main README with documentation links and features
📁 New Files Added
health-calculator/spec.php- Health Calculator API Documentationpassword-generator/spec.php- Password Generator API Documentation- `user...
Version 2.1.1 - Username Generator Interface Cleanup
📋 MyAPIs Release Notes
Current Release: Version 2.1.1
Release Date: September 11, 2025
Status: Stable Release
🔧 Version 2.1.1 - Username Generator Interface Cleanup
Released: September 11, 2025
🧹 Interface Improvements
📝 Removed Unused Use Case Field
- Removed
use_caseparameter: Eliminated the unused "Use Case" dropdown from web interface - API Cleanup: Removed
use_casefrom API parameters and response data - Simplified Interface: Cleaner, more focused interface without confusing non-functional options
- Documentation Updated: Updated README.md to reflect parameter changes
- Backward Compatibility: Existing API calls will continue to work (parameter simply ignored)
📚 Documentation Updates
- Parameter Documentation: Updated API parameter table to remove
use_case - Example Requests: Updated all code examples to exclude the removed parameter
- Response Examples: Updated JSON response examples without
use_casefield
🎯 Version 2.1.0 - Username Generator Enhanced Multi-Theme Support
Released: September 11, 2025
🌟 Major New Features
🎨 Multi-Theme Username Generation
- Multiple Theme Selection: Users can now select multiple themes simultaneously for more diverse username combinations
- 7 Comprehensive Themes: Updated theme collection with complete word lists:
- Fantasy: Epic, mythical usernames for gaming (Epic, Shadow, Warrior, Dragon, Wizard)
- Professional: Business and LinkedIn-ready usernames (Smart, Expert, Developer, Manager, Director)
- Science and Space: Space exploration and scientific terms (Stellar, Galaxy, Quantum, Atom, Einstein)
- Computer Technology: Programming and tech-focused (Digital, Algorithm, Framework, Docker, JavaScript)
- Elements and Chemistry: Chemistry and periodic elements (Hydrogen, Carbon, Molecular, Crystal, Plasma)
- Things: Everyday objects and items (Fork, Table, Chair, Lamp, Knife)
- Body and Health: Health and anatomy themed (Heart, Brain, Strong, Healthy, Muscle)
- Nature: Lanscape fruites and animals (Mountain, Grape, Fox, Wolf, Banana)
- Space and Time: Usernames inspired by concepts of space and time (Metric, Meter, Hour, Space, Time, Centi)
🔧 Enhanced API Capabilities
- Multi-Theme Parameter: New
themesarray parameter allows combining multiple themes - Backward Compatibility: Legacy
themeparameter still supported for single-theme selection - GET Support: Multi-theme selection via comma-separated values in GET requests
- Enhanced Response: Generation info includes selected themes count and theme list
🖥️ Improved Web Interface
- Checkbox Theme Selection: Replaced dropdown with intuitive checkboxes for multi-theme selection
- Visual Theme Indicators: Better visual feedback for selected themes
- Multi-Theme Description: Helpful tooltips explaining multi-theme benefits
- Enhanced Results Display: Shows all selected themes in generation information
🛠️ Technical Improvements
📊 API Enhancements
- Flexible Input Handling: Supports both single theme and multiple themes in same API
- Improved Validation: Enhanced theme validation with specific error messages
- Word Deduplication: Automatic removal of duplicate words when combining themes
- Extended Word Lists: Added hundreds of new words across all theme categories
🌐 Web Interface Updates
- Dynamic Theme Loading: Themes loaded dynamically from API for consistency
- Improved JavaScript: Better error handling and form validation
- Enhanced UX: More intuitive multi-selection interface
- Responsive Design: Checkbox layout adapts to different screen sizes
📚 Documentation Updates
- Complete API Documentation: Updated all examples to show multi-theme usage
- New Use Cases: Added examples for science, chemistry, and health-themed usernames
- Backward Compatibility Guide: Clear migration path from single to multi-theme
- Enhanced README: Updated project documentation with new theme descriptions
� Version 2.0.1 - Major Architecture Restructuring
Released: September 10, 2025
🌟 Major Changes
🏗️ Complete Project Restructuring
- New Architecture: Reorganized from individual tool folders to clean
public/andapi/separation - Clean URLs: Beautiful, organized URL structure with
/public/for interfaces and/api/for endpoints - Enhanced Navigation: Streamlined access to tools, APIs, and documentation
- Better Organization: Logical separation of concerns for easier maintenance and deployment
�📚 Dynamic API Documentation System
- Server-Agnostic URLs: Documentation automatically adapts to any server domain using PHP
$_SERVERvariables - Centralized Documentation: All API specs moved to
public/api-specs/directory - Interactive Examples: Working code samples that use the current server's URL
- No More Hardcoded URLs: Eliminated hardcoded domain references throughout the project
🔧 API Accuracy Corrections
- Parameter Verification: All API documentation parameters verified against actual implementations
- Corrected Examples: Fixed numerous parameter name mismatches and incorrect examples
- Consistent Responses: Standardized response formats across all tools
- Updated Endpoints: All API endpoints updated to new
/api/tool-name/format
🐛 Bug Fixes
🌐 Web Interface Corrections
- Fixed API Calls: Updated all JavaScript fetch() calls to use correct API endpoints
- Navigation Fixes: Corrected all internal links to work with new structure
- Username Generator: Fixed API endpoint calls and response handling
- PromptPay QR Generator: Resolved API communication issues
- Random Generator: Fixed randomization API calls
- Fortune Teller: Resolved prediction file path issues
🔗 File Path Corrections
- Fortune Teller API: Fixed predictions directory path from
/../predictions/to/predictions/ - Asset Links: Updated all asset references to work with new structure
- Documentation Links: Corrected all cross-references between tools and docs
📁 New File Structure
myapis/
├── public/ # User-facing interfaces
│ ├── index.php # Main landing page
│ ├── *.php # Individual tool interfaces
│ └── api-specs/ # API documentation
├── api/ # Backend API implementations
│ └── */index.php # Individual API endpoints
├── README.md # Updated project documentation
└── RELEASE.md # This file
🔄 Breaking Changes
- URL Structure: All URLs changed from
/tool-name/to/public/tool-name.php - API Endpoints: All APIs moved from
/tool-name/api/to/api/tool-name/ - Documentation: API docs moved from
/tool-name/spec.phpto/public/api-specs/tool-name.php - Navigation: All internal links updated to reflect new structure
✅ Verification & Testing
- API Testing: All endpoints verified with curl and browser testing
- Web Interface Testing: All tools tested for functionality and user experience
- Documentation Accuracy: All examples and parameters verified against actual code
- Cross-Browser Testing: Verified compatibility across modern browsers
- Mobile Testing: Ensured responsive design works on all devices
🛠️ Technical Improvements
- Cleaner Architecture: Better separation of concerns between frontend and backend
- Easier Deployment: Simplified deployment with clear public/api structure
- Better Maintainability: More organized codebase for easier updates
- Enhanced Security: Improved input validation and error handling
- Performance: Optimized file structure for better loading times
💧 Version 1.3.1 - API Documentation Enhancement
Released: September 9, 2025
🌟 New Features
📖 Comprehensive API Documentation
- Interactive API Specs: Added
spec.phpfiles for all tools with comprehensive documentation - Enhanced Navigation: Added navigation links to API documentation from all web interfaces
- Consistent Design: Beautiful, responsive documentation pages with consistent styling
- Complete Examples: Detailed request/response examples for all API endpoints
- Error Documentation: Comprehensive error codes and troubleshooting guides
- Integration Examples: Code examples in multiple programming languages
🔗 Improved User Experience
- Main Interface Enhancement: Added "API Docs" buttons to all tool cards
- Tool Navigation: Added breadcrumb navigation and quick links to API resources
- Updated Project Structure: Documentation reflects new file organization
- Enhanced README: Updated main README with documentation links and features
📁 New Files Added
health-calculator/spec.php- Health Calculator API Documentationpassword-generator/spec.php- Password Generator API Documentationusername-generator/spec.php- Username Generator API Documentationpromptpay-qr-generator/spec.php- PromptPay QR Generator API Documentationfortune-teller/spec.php- Fortune Teller API Documentationrandomizer/spec.php- Random Generator API Documentation
🔄 Enhancements
- Main README Updated: Added documentation column to tools table
- Interface Improvements: All tools now have consistent navigation
- Project Structure: Updated documentation to reflect spec.php additions
- User Flow: Seamless navigation between tools, APIs, and documentation
💧 Version 1.2.0 - Water Intake Calculator Addition
Released: September 9, 2025
🌟 New Features
🏥 Health Calculator - Water Inta...
Major Architecture Restructuring
📋 MyAPIs Release Notes
Current Release: Version 2.0.0
Release Date: September 10, 2025
Status: Stable Release
� Version 2.0.0 - Major Architecture Restructuring
Released: September 10, 2025
🌟 Major Changes
🏗️ Complete Project Restructuring
- New Architecture: Reorganized from individual tool folders to clean
public/andapi/separation - Clean URLs: Beautiful, organized URL structure with
/public/for interfaces and/api/for endpoints - Enhanced Navigation: Streamlined access to tools, APIs, and documentation
- Better Organization: Logical separation of concerns for easier maintenance and deployment
�📚 Dynamic API Documentation System
- Server-Agnostic URLs: Documentation automatically adapts to any server domain using PHP
$_SERVERvariables - Centralized Documentation: All API specs moved to
public/api-specs/directory - Interactive Examples: Working code samples that use the current server's URL
- No More Hardcoded URLs: Eliminated hardcoded domain references throughout the project
🔧 API Accuracy Corrections
- Parameter Verification: All API documentation parameters verified against actual implementations
- Corrected Examples: Fixed numerous parameter name mismatches and incorrect examples
- Consistent Responses: Standardized response formats across all tools
- Updated Endpoints: All API endpoints updated to new
/api/tool-name/format
🐛 Bug Fixes
🌐 Web Interface Corrections
- Fixed API Calls: Updated all JavaScript fetch() calls to use correct API endpoints
- Navigation Fixes: Corrected all internal links to work with new structure
- Username Generator: Fixed API endpoint calls and response handling
- PromptPay QR Generator: Resolved API communication issues
- Random Generator: Fixed randomization API calls
- Fortune Teller: Resolved prediction file path issues
🔗 File Path Corrections
- Fortune Teller API: Fixed predictions directory path from
/../predictions/to/predictions/ - Asset Links: Updated all asset references to work with new structure
- Documentation Links: Corrected all cross-references between tools and docs
📁 New File Structure
myapis/
├── public/ # User-facing interfaces
│ ├── index.php # Main landing page
│ ├── *.php # Individual tool interfaces
│ └── api-specs/ # API documentation
├── api/ # Backend API implementations
│ └── */index.php # Individual API endpoints
├── README.md # Updated project documentation
└── RELEASE.md # This file
🔄 Breaking Changes
- URL Structure: All URLs changed from
/tool-name/to/public/tool-name.php - API Endpoints: All APIs moved from
/tool-name/api/to/api/tool-name/ - Documentation: API docs moved from
/tool-name/spec.phpto/public/api-specs/tool-name.php - Navigation: All internal links updated to reflect new structure
✅ Verification & Testing
- API Testing: All endpoints verified with curl and browser testing
- Web Interface Testing: All tools tested for functionality and user experience
- Documentation Accuracy: All examples and parameters verified against actual code
- Cross-Browser Testing: Verified compatibility across modern browsers
- Mobile Testing: Ensured responsive design works on all devices
🛠️ Technical Improvements
- Cleaner Architecture: Better separation of concerns between frontend and backend
- Easier Deployment: Simplified deployment with clear public/api structure
- Better Maintainability: More organized codebase for easier updates
- Enhanced Security: Improved input validation and error handling
- Performance: Optimized file structure for better loading times
💧 Version 1.3.1 - API Documentation Enhancement
Released: September 9, 2025
🌟 New Features
📖 Comprehensive API Documentation
- Interactive API Specs: Added
spec.phpfiles for all tools with comprehensive documentation - Enhanced Navigation: Added navigation links to API documentation from all web interfaces
- Consistent Design: Beautiful, responsive documentation pages with consistent styling
- Complete Examples: Detailed request/response examples for all API endpoints
- Error Documentation: Comprehensive error codes and troubleshooting guides
- Integration Examples: Code examples in multiple programming languages
🔗 Improved User Experience
- Main Interface Enhancement: Added "API Docs" buttons to all tool cards
- Tool Navigation: Added breadcrumb navigation and quick links to API resources
- Updated Project Structure: Documentation reflects new file organization
- Enhanced README: Updated main README with documentation links and features
📁 New Files Added
health-calculator/spec.php- Health Calculator API Documentationpassword-generator/spec.php- Password Generator API Documentationusername-generator/spec.php- Username Generator API Documentationpromptpay-qr-generator/spec.php- PromptPay QR Generator API Documentationfortune-teller/spec.php- Fortune Teller API Documentationrandomizer/spec.php- Random Generator API Documentation
🔄 Enhancements
- Main README Updated: Added documentation column to tools table
- Interface Improvements: All tools now have consistent navigation
- Project Structure: Updated documentation to reflect spec.php additions
- User Flow: Seamless navigation between tools, APIs, and documentation
💧 Version 1.2.0 - Water Intake Calculator Addition
Released: September 9, 2025
🌟 New Features
🏥 Health Calculator - Water Intake Calculator
- Daily Water Intake Calculator: Personalized water requirements based on multiple factors
- Comprehensive Factors: Weight, age, gender, activity level, climate, and health conditions
- Smart Adjustments: Automatic adjustments for different climates and health conditions
- Detailed Breakdown: Shows water from drinks vs food, number of glasses needed
- Health Condition Support: Special calculations for pregnancy, breastfeeding, fever, etc.
- Climate Awareness: Adjustments for cold, temperate, hot, and very hot climates
- API Integration: Full REST API support with detailed responses
🔄 Enhancements
- Updated Interface: Added fourth calculator tab for water intake
- Enhanced Documentation: Complete API documentation with water intake examples
- Improved Validation: Added validation for water intake specific parameters
�🚀 Version 1.1.0 - Health Calculator Enhancement
Released: September 9, 2025
🌟 Major Updates
🏥 Health Calculator (Formerly BMI Calculator)
- Enhanced Functionality: Expanded from simple BMI calculator to comprehensive health calculator
- BMI Calculator: Body Mass Index calculation with WHO standard categories
- BMR Calculator: Basal Metabolic Rate calculation using Mifflin-St Jeor equation
- Daily Intake Calculator: Personalized caloric needs with macronutrient breakdown
- Activity Level Integration: 5 activity levels from sedentary to extra active
- Goal-Based Calculations: Support for weight maintenance, loss, or gain targets
- Improved UI: Multi-tab interface for seamless switching between calculators
- Enhanced API: Unified endpoint supporting all calculation types
- Better Documentation: Comprehensive API documentation with examples for all calculators
🔄 Breaking Changes
- Folder Renamed:
bmi-calculator/→health-calculator/ - API Updates: New parameter structure for BMR and Daily Intake calculations
- URL Changes: All links updated to reflect new folder structure
🎉 Version 1.0.0 - Initial Release
Released: September 9, 2025
🌟 New Features
🚀 Core Platform
- Landing Page: Beautiful gradient-based responsive homepage with tool grid
- Unified Design: Consistent UI/UX across all tools and APIs
- Mobile Responsive: Full mobile optimization for all interfaces
- Statistics Dashboard: Real-time platform statistics display
🏥 Health Calculator
- Multi-Calculator Interface: BMI, BMR, and Daily Intake calculators in one tool
- BMI Calculator: Body Mass Index with WHO standard categories
- BMR Calculator: Basal Metabolic Rate using Mifflin-St Jeor equation
- Daily Intake Calculator: Personalized caloric needs with macronutrient breakdown
- Activity Level Support: 5 activity levels from sedentary to extra active
- Goal-Based Calculations: Weight maintenance, loss, or gain targets
- Multi-Unit Support: Metric (kg/cm) and Imperial (lbs/inches)
- Health Insights: Personalized recommendations for each calculation type
- REST API: Comprehensive JSON-based health calculation endpoints
🔐 Password Generator
- Advanced Generation: Cryptographically secure password creation
- Customizable Options: Length control (1-128 characters)
- Character Sets: Lowercase, uppercase, numbers, symbols
- Security Features: Exclude ambiguous characters, prevent repetition
- Batch Generation: Generate multiple passwords simultaneously
- Strength Analysis: Real-time password strength evaluation
👤 Username Generator
- Themed Categories: 6 different word themes for username generation
- Cross-Theme Combinations: Mix themes for unique usernames
- Large Word Pool: 100+ adjectives and themed nouns
- Bulk Generation: Create multiple usernames at once
- API Integration: RESTful API for programmatic access
💳 PromptPay QR Generator
- EMV Compliance: Full EMV QR Code stand...