Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions support/30sec-challenge/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,26 @@
<meta property="og:type" content="website">
<meta property="og:site_name" content="SK APPS">
<meta property="og:title" content="30sec Challenge App – 30-Second Video Battles">
<meta property="og:description" content="Discover 30sec Challenge, the Android app for short video challenges and daily leaderboards. Explore how it works, find the Google Play link and get support.">
<meta property="og:description" content="30sec Challenge is an Android app for short video challenges and daily leaderboards. See how it works, install from Google Play, or find support.">
<meta property="og:url" content="https://appdevelopsk.com/support/30sec-challenge/">
<meta property="og:image" content="https://appdevelopsk.com/icons/apps/30sec-challenge.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "30sec Challenge",
"url": "https://appdevelopsk.com/support/30sec-challenge/",
"operatingSystem": "Android",
"applicationCategory": "GameApplication",
"downloadUrl": "https://play.google.com/store/apps/details?id=com.thirtysecchallenge.thirtySecChallenge",
"description": "30sec Challenge is an Android app for short video challenges and daily leaderboards. See how it works, install from Google Play, or find support."
}
</script>
<meta name="twitter:card" content="summary">
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<title>30sec Challenge App – 30-Second Video Battles | SK APPS</title>
<meta name="description" content="Discover 30sec Challenge, the Android app for short video challenges and daily leaderboards. Explore how it works, find the Google Play link and get support."/>
<title>30sec Challenge: 30-Second Video Battles | SK APPS</title>
<meta name="description" content="30sec Challenge is an Android app for short video challenges and daily leaderboards. See how it works, install from Google Play, or find support."/>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<style>
Expand Down
18 changes: 15 additions & 3 deletions support/debate-me/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,26 @@
<meta property="og:type" content="website">
<meta property="og:site_name" content="SK APPS">
<meta property="og:title" content="Debate Me: AI Debate Practice &amp; Argument Skills">
<meta property="og:description" content="Debate Me is an AI debate practice app to sharpen your arguments and win any discussion. Get it on Google Play, plus FAQ and support.">
<meta property="og:description" content="Practice your arguments with Debate Me, an AI debate app for Android. Explore the app, find help and FAQs, or install it from Google Play.">
<meta property="og:url" content="https://appdevelopsk.com/support/debate-me/">
<meta property="og:image" content="https://appdevelopsk.com/icons/apps/debate-me.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Debate Me",
"url": "https://appdevelopsk.com/support/debate-me/",
"operatingSystem": "Android",
"applicationCategory": "EducationalApplication",
"downloadUrl": "https://play.google.com/store/apps/details?id=jp.appdevelopsk.debate_me",
"description": "Practice your arguments with Debate Me, an AI debate app for Android. Explore the app, find help and FAQs, or install it from Google Play."
}
</script>
<meta name="twitter:card" content="summary">
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<title>Debate Me: AI Debate Practice & Argument Skills | SK APPS</title>
<meta name="description" content="Debate Me is an AI debate practice app to sharpen your arguments and win any discussion. Get it on Google Play, plus FAQ and support."/>
<title>Debate Me: AI Debate Practice for Android | SK APPS</title>
<meta name="description" content="Practice your arguments with Debate Me, an AI debate app for Android. Explore the app, find help and FAQs, or install it from Google Play."/>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<style>
Expand Down
26 changes: 26 additions & 0 deletions tests/support-app-schema.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';

const pages = [
['30sec-challenge', 'com.thirtysecchallenge.thirtySecChallenge'],
['debate-me', 'jp.appdevelopsk.debate_me'],
];

for (const [slug, pkg] of pages) {
test(`${slug} support page has verifiable application metadata`, () => {
const html = readFileSync(new URL(`../support/${slug}/index.html`, import.meta.url), 'utf8');
const schemas = [...html.matchAll(/<script type="application\/ld\+json">([\s\S]*?)<\/script>/g)].map(m => JSON.parse(m[1]));
const app = schemas.find(s => s['@type'] === 'SoftwareApplication');
const desc = html.match(/<meta name="description" content="([^"]+)"/)?.[1];
assert.ok(app);
assert.equal(app.operatingSystem, 'Android');
assert.equal(app.url, `https://appdevelopsk.com/support/${slug}/`);
assert.equal(app.downloadUrl, `https://play.google.com/store/apps/details?id=${pkg}`);
assert.equal(app.description, desc);
assert.match(html, new RegExp(`rel="canonical" href="https://appdevelopsk\\.com/support/${slug}/"`));
assert.ok(html.includes(`id=${pkg}`), 'must match visible store link');
assert.equal('offers' in app, false, 'do not invent prices');
assert.equal('aggregateRating' in app, false, 'do not invent ratings');
});
}
Loading