refactor: publish public site as static html

This commit is contained in:
ZuoZuo 2026-04-14 17:31:21 +08:00
parent 92602b3457
commit 689e3e38b5
80 changed files with 2523 additions and 1525 deletions

View File

@ -1,51 +1,58 @@
# Haiyi Public Site
This directory contains the public website for `www.haiyihy.com` and the H5 landing pages for `h5.haiyihy.com`.
This repository is the source of truth for the public website on `www.haiyihy.com` and the H5 pages on `h5.haiyihy.com`.
## Structure
- `content/site.json`: Official website and company-level content.
- `content/legal.json`: Privacy policy and terms content.
- `content/landing-pages/*.json`: One JSON file per H5 landing page.
- `src/site.css`: Shared styling for all generated pages.
- `scripts/build.mjs`: Static site generator.
- `scripts/new-landing-page.mjs`: Scaffolds a new landing page JSON file.
- `www/`: static files served for `https://www.haiyihy.com`
- `h5/`: static files served for `https://h5.haiyihy.com`
- `h5/ranking/`: Yumi-compatible ranking page using `https://jvapi.haiyihy.com`
## Local workflow
Every page is stored as complete HTML/CSS/JS files in git. There is no JSON-driven page generation step in production anymore.
## Edit Workflow
```bash
cd public-site
node ./scripts/build.mjs
edit www/... or h5/...
git add .
git commit
git push
```
The generated output is written to `public-site/dist`:
## Production Sync
- `dist/www`: content for `www.haiyihy.com`
- `dist/h5`: content for `h5.haiyihy.com`
Production keeps a dedicated clone on the public-site server and syncs it every 20 seconds through `systemd`:
## Landing page management
- server repo: `/opt/haiyihy-public-site/repo`
- origin runtime: `/opt/haiyihy-public-site/runtime`
- sync timer: `haiyihy-public-site-sync.timer`
- source origin domains:
- `www-origin.haiyihy.com`
- `h5-origin.haiyihy.com`
Current management is file-driven:
The origin server serves static files directly from the git checkout:
1. Duplicate an existing JSON file under `content/landing-pages/`, or run:
- `repo/www` -> `www.haiyihy.com` / `www-origin.haiyihy.com`
- `repo/h5` -> `h5.haiyihy.com` / `h5-origin.haiyihy.com`
User-facing traffic goes through Tencent Cloud CDN. CDN pulls from the two `*-origin.haiyihy.com` domains.
## Cache Strategy
- HTML routes: short cache on origin/CDN
- Static assets: long cache on origin/CDN
- Fast bypass:
- append `?t=...`
- purge in Tencent Cloud International CDN console
- run the purge script:
```bash
cd public-site
node ./scripts/new-landing-page.mjs your-page-slug
./deploy/tencent-prod/refresh_public_site_cdn.sh
```
2. Edit the JSON content only. No Vue or HTML editing is required.
3. Rebuild the site:
## Bootstrap / Redeploy
```bash
cd public-site
node ./scripts/build.mjs
./deploy/tencent-prod/redeploy_public_site.sh
```
4. Run the public-site deployment script:
```bash
./deploy/tencent-prod/.venv/bin/python ./deploy/tencent-prod/deploy_public_site.py
```
If you later want a browser-based online editor with persistence, this structure is already suitable for adding a small API or CMS layer.

View File

@ -1,36 +0,0 @@
{
"slug": "admin-center",
"theme": "steel",
"eyebrow": "Operations gateway",
"title": "A public-facing operations handoff page for admin and campaign distribution needs.",
"summary": "Use this page as a lightweight web entrance when the final system sits behind internal tools or role-based access.",
"highlight": "Separates public routing and internal operations cleanly.",
"cta": {
"label": "Official Website",
"href": "https://www.haiyihy.com/"
},
"secondaryCta": {
"label": "Host Center",
"href": "https://h5.haiyihy.com/host-center/"
},
"stats": [
{
"value": "Public shell",
"label": "for internal-operation entry design"
},
{
"value": "Reusable",
"label": "for future operational routing"
}
],
"sections": [
{
"title": "Controlled access",
"body": "Keep actual admin systems private while still presenting a clear, branded public-facing handoff page when needed."
},
{
"title": "Simple maintenance",
"body": "Because the content is generated from JSON, copy and target links can be revised quickly."
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "agency-center",
"theme": "violet",
"eyebrow": "Agency program",
"title": "A clear H5 entry for agencies, channel partners, and growth collaborators.",
"summary": "Use this page to explain the agency model, onboarding expectations, communication channels, and next actions.",
"highlight": "Tailored for channel-driven growth programs and partner onboarding.",
"cta": {
"label": "Open BD Center",
"href": "https://h5.haiyihy.com/bd-center/"
},
"secondaryCta": {
"label": "Invite New Users",
"href": "https://h5.haiyihy.com/invite-new-user/"
},
"stats": [
{
"value": "Partner",
"label": "orientation and conversion flow"
},
{
"value": "Flexible",
"label": "content for region-specific campaigns"
}
],
"sections": [
{
"title": "Program framing",
"body": "This page can communicate eligibility, relationship structure, reward model, and operational expectations."
},
{
"title": "Campaign agility",
"body": "You can run multiple variants over time while keeping the page system stable and easy to maintain."
}
]
}

View File

@ -1,46 +0,0 @@
{
"slug": "apply",
"theme": "ember",
"eyebrow": "Host recruitment",
"title": "Apply to become a Yumi host and start your own voice room community.",
"summary": "Designed for creators who want to host conversations, run themed rooms, and grow an audience around live social interaction.",
"highlight": "Fast onboarding for hosts, room operators, and community starters.",
"cta": {
"label": "Download Yumi",
"href": "https://play.google.com/store/apps/details?id=com.org.yumi"
},
"secondaryCta": {
"label": "View Host Center",
"href": "https://h5.haiyihy.com/host-center/"
},
"stats": [
{
"value": "Live",
"label": "voice-room-first host workflow"
},
{
"value": "Flexible",
"label": "community and event formats"
}
],
"sections": [
{
"title": "Who this is for",
"body": "Hosts who can bring conversation energy, build room identity, and keep users engaged through recurring activities.",
"bullets": [
"Run voice rooms and themed sessions",
"Build your own regular audience rhythm",
"Participate in campaigns and operational support"
]
},
{
"title": "What you get",
"body": "Yumi is built to support the host lifecycle from room setup to room growth and activity retention.",
"bullets": [
"Room profile and room settings support",
"Mic, member, and room interaction tools",
"Campaign entry points connected to H5 funnels"
]
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "bd-center",
"theme": "forest",
"eyebrow": "Business development",
"title": "A campaign-ready H5 entrance for BD activities and partner growth.",
"summary": "Use this page to brief BD participants, explain deliverables, and connect external traffic into measurable operational flows.",
"highlight": "Built for acquisition, activation, and channel-based growth operations.",
"cta": {
"label": "Open Agency Center",
"href": "https://h5.haiyihy.com/agency-center/"
},
"secondaryCta": {
"label": "Invite New Users",
"href": "https://h5.haiyihy.com/invite-new-user/"
},
"stats": [
{
"value": "Partner-ready",
"label": "external communication format"
},
{
"value": "Structured",
"label": "clear calls to action"
}
],
"sections": [
{
"title": "Operational clarity",
"body": "Use this page to define the audience, reward logic, participation steps, and submission or review flows."
},
{
"title": "Fast reconfiguration",
"body": "Swap campaign copy, target region language, and CTA links by editing content files instead of rebuilding the app."
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "bd-leader-center",
"theme": "ink",
"eyebrow": "Leadership view",
"title": "A structured overview page for BD leaders managing multiple contributors or growth tracks.",
"summary": "Ideal for summarizing current focus areas, reporting expectations, onboarding standards, and campaign coordination notes.",
"highlight": "A cleaner destination for management-level communication and rollout guidance.",
"cta": {
"label": "Open BD Center",
"href": "https://h5.haiyihy.com/bd-center/"
},
"secondaryCta": {
"label": "Agency Center",
"href": "https://h5.haiyihy.com/agency-center/"
},
"stats": [
{
"value": "Manager",
"label": "orientation layer for BD leadership"
},
{
"value": "Reusable",
"label": "template for future operations"
}
],
"sections": [
{
"title": "Use cases",
"body": "Campaign kickoff notes, team dashboards, policy reminders, or coordination pages can all be routed through this destination."
},
{
"title": "Editorial control",
"body": "Each page is file-driven, so operational owners can prepare a release-ready content update without touching layout code."
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "coin-seller",
"theme": "gold",
"eyebrow": "Sales and recharge",
"title": "A dedicated funnel page for coin sales, recharge guidance, and payment-related campaigns.",
"summary": "Use this landing page to explain transaction steps, campaign windows, purchase support, and payment channel notices.",
"highlight": "Useful for external campaign links where a direct app-store page is too generic.",
"cta": {
"label": "Open Google Play",
"href": "https://play.google.com/store/apps/details?id=com.org.yumi"
},
"secondaryCta": {
"label": "Support Email",
"href": "mailto:support@haiyihy.com"
},
"stats": [
{
"value": "Payment-ready",
"label": "for purchase and recharge communication"
},
{
"value": "Clear",
"label": "support escalation path"
}
],
"sections": [
{
"title": "Payment communication",
"body": "Summarize recharge channels, availability windows, support methods, and any temporary campaign mechanics in one stable page."
},
{
"title": "Review-safe",
"body": "For compliance-sensitive launches, this page can carry explanatory copy without changing in-app billing logic."
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "games-king",
"theme": "berry",
"eyebrow": "Games campaign",
"title": "A landing page slot for game-focused events, rankings, and seasonal engagement campaigns.",
"summary": "Use this destination for mini-game promotions, challenge seasons, rankings, and cross-room participation drives.",
"highlight": "Designed for event storytelling rather than dense system UI.",
"cta": {
"label": "Open Room Rankings",
"href": "https://h5.haiyihy.com/rankings-rooms/"
},
"secondaryCta": {
"label": "Open Wealth Rankings",
"href": "https://h5.haiyihy.com/rankings-wealth/"
},
"stats": [
{
"value": "Seasonal",
"label": "for event-based traffic spikes"
},
{
"value": "Lightweight",
"label": "copy-first promotional format"
}
],
"sections": [
{
"title": "Event-ready",
"body": "Turn this page into a game season hub, contest explainer, or campaign teaser with one content update."
},
{
"title": "Cross-linkable",
"body": "It can point users into rankings, invitation flows, room events, or download paths."
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "host-center",
"theme": "sapphire",
"eyebrow": "Host operations",
"title": "A central landing page for creators, room owners, and active hosts.",
"summary": "Use this page as the distribution point for host-facing updates, onboarding steps, room guidance, and operational notices.",
"highlight": "A stable host-facing H5 entry point linked directly from the app.",
"cta": {
"label": "Apply as Host",
"href": "https://h5.haiyihy.com/apply/"
},
"secondaryCta": {
"label": "Privacy Policy",
"href": "https://h5.haiyihy.com/privacy.html"
},
"stats": [
{
"value": "1 page",
"label": "for recurring host communication"
},
{
"value": "Low friction",
"label": "distribution from app and campaigns"
}
],
"sections": [
{
"title": "Use it as a routing hub",
"body": "This page can carry current season rules, host incentives, room standards, or updated activity instructions without shipping a new app build."
},
{
"title": "Keep copy editable",
"body": "The page content is managed from a single JSON file so operators can update titles, highlights, bullets, and links with minimal engineering overhead."
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "invite-new-user",
"theme": "mint",
"eyebrow": "Growth funnel",
"title": "A clean invitation page for user acquisition, referral campaigns, and onboarding traffic.",
"summary": "Use this page to tell new users what Yumi is, why they should join, and where the invite flow leads next.",
"highlight": "Built for referral links, community invite traffic, and campaign attribution handoffs.",
"cta": {
"label": "Download Yumi",
"href": "https://play.google.com/store/apps/details?id=com.org.yumi"
},
"secondaryCta": {
"label": "Official Website",
"href": "https://www.haiyihy.com/"
},
"stats": [
{
"value": "Referral",
"label": "friendly landing format"
},
{
"value": "App-first",
"label": "clear user conversion path"
}
],
"sections": [
{
"title": "What this page should do",
"body": "Explain the value of Yumi quickly, remove ambiguity for first-time visitors, and route them cleanly into app installation."
},
{
"title": "How to operate it",
"body": "Adjust headline, incentive copy, and campaign validity in JSON whenever a new invite program starts."
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "rankings-charm",
"theme": "rose",
"eyebrow": "Rankings",
"title": "A dedicated landing page slot for charm campaigns, profile visibility pushes, and social leaderboard events.",
"summary": "Use this page when the campaign angle is social presence, room influence, or creator energy rather than pure spend.",
"highlight": "Helpful for event framing, rewards copy, and seasonal leaderboards.",
"cta": {
"label": "Open Wealth Rankings",
"href": "https://h5.haiyihy.com/rankings-wealth/"
},
"secondaryCta": {
"label": "Open Room Rankings",
"href": "https://h5.haiyihy.com/rankings-rooms/"
},
"stats": [
{
"value": "Social",
"label": "campaign framing"
},
{
"value": "Brand-safe",
"label": "copy-first leaderboard destination"
}
],
"sections": [
{
"title": "Use it for social momentum",
"body": "This page is a better pre-click story for charm or popularity campaigns than a raw in-app ranking screen."
},
{
"title": "Keep it current",
"body": "Page content is isolated from app releases so the campaign story can change without app-store friction."
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "rankings-rooms",
"theme": "teal",
"eyebrow": "Rankings",
"title": "A room-ranking campaign page for spotlighting active communities, top rooms, and themed room competitions.",
"summary": "Useful when you want to explain what the room ranking means before sending users into the app experience.",
"highlight": "Purpose-built for room growth, discovery, and campaign traffic.",
"cta": {
"label": "Apply as Host",
"href": "https://h5.haiyihy.com/apply/"
},
"secondaryCta": {
"label": "Open Games Campaign",
"href": "https://h5.haiyihy.com/games-king/"
},
"stats": [
{
"value": "Community",
"label": "room-based campaign focus"
},
{
"value": "High-intent",
"label": "bridge from web to in-app room entry"
}
],
"sections": [
{
"title": "Campaign format",
"body": "Use this page to explain ranking time windows, participation criteria, or room activity themes."
},
{
"title": "Discovery surface",
"body": "It also works as a lightweight discovery page for room-focused users coming from ads, social posts, or direct links."
}
]
}

View File

@ -1,36 +0,0 @@
{
"slug": "rankings-wealth",
"theme": "gold",
"eyebrow": "Rankings",
"title": "A public landing page for wealth-themed campaigns, visibility pushes, and leaderboard storytelling.",
"summary": "Use this URL when you need a branded web destination for top-spender or premium-activity campaigns before routing users back into the app.",
"highlight": "A stable, linkable page for high-value campaign distribution.",
"cta": {
"label": "Open Charm Rankings",
"href": "https://h5.haiyihy.com/rankings-charm/"
},
"secondaryCta": {
"label": "Open Room Rankings",
"href": "https://h5.haiyihy.com/rankings-rooms/"
},
"stats": [
{
"value": "Public",
"label": "campaign destination"
},
{
"value": "Flexible",
"label": "can describe seasonal leaderboard logic"
}
],
"sections": [
{
"title": "Why use a web page",
"body": "This lets operations explain campaign windows, prize rules, or ranking focus without requiring app copy updates."
},
{
"title": "How to adapt it",
"body": "Swap the title, hero summary, and CTA targets to match the next season or region."
}
]
}

View File

@ -1,304 +0,0 @@
{
"effectiveDate": "2026-04-13",
"privacy": {
"title": "Privacy Policy",
"summary": "This Privacy Policy explains how Yumi and its operating entity collect, use, store, share, and protect information when users access the Yumi mobile application, websites, H5 pages, and related services.",
"sections": [
{
"title": "1. Data Controller",
"paragraphs": [
"Yumi is operated by 環球互動科技有限公司 (Global Interactive Technology Co., Limited).",
"Registered address: 中国香港环球大厦A01.",
"For privacy questions, deletion requests, or complaints, contact: postmaster@haiyinet.com.cn or call +85256283162."
]
},
{
"title": "2. Scope of This Policy",
"paragraphs": [
"This policy applies to the Yumi mobile application, the official website at www.haiyihy.com, H5 pages at h5.haiyihy.com, customer support interactions, and other related online services operated under the Yumi brand."
]
},
{
"title": "3. Information We Collect",
"paragraphs": [
"Depending on how a user interacts with Yumi, we may collect the following categories of information:"
],
"bullets": [
"Account information, such as nickname, profile photo, login identifier, country or region, and account preferences.",
"User-generated content, such as room names, room profile information, chat content, posts, reports, profile text, and uploaded media.",
"Voice-room interaction data, including room participation, microphone state, room role, room settings, gift activity, and room engagement logs.",
"Device and technical data, such as device model, operating system version, app version, network type, device identifiers, crash logs, and diagnostic data.",
"Transaction and billing data related to in-app purchases, order status, recharge behavior, wallet history, and fraud-prevention checks.",
"Support and risk data, such as user reports, abuse complaints, moderation decisions, and customer service records.",
"Website usage data, including standard log data and limited browser information when users visit our public web pages."
]
},
{
"title": "4. How We Use Information",
"bullets": [
"Provide account registration, login, room participation, chat, and social features.",
"Maintain platform integrity, trust, anti-abuse workflows, and fraud prevention.",
"Process purchases, virtual items, recharge flows, and related financial support operations.",
"Operate events, rankings, invitations, host programs, and agency-related H5 campaigns.",
"Improve product performance through analytics, diagnostics, and crash resolution.",
"Respond to support requests, complaints, legal notices, and data-rights requests.",
"Comply with applicable laws, lawful requests, and platform obligations."
]
},
{
"title": "5. Legal Bases",
"paragraphs": [
"Where applicable, we process personal information because it is necessary to provide requested services, to comply with legal obligations, to protect the platform and users, or based on legitimate business interests such as product operations, analytics, and service improvement.",
"When consent is required by law for a specific processing activity, we will rely on that consent."
]
},
{
"title": "6. How Information May Be Shared",
"paragraphs": [
"We do not sell personal information. We may share information only as reasonably necessary in the following cases:"
],
"bullets": [
"With infrastructure, cloud, analytics, messaging, payment, customer-service, or fraud-prevention vendors that help us operate Yumi.",
"With app-store or platform providers when required to support purchases, app review, crash handling, or policy compliance.",
"With professional advisers, auditors, insurers, or legal representatives where reasonably necessary.",
"When required by law, regulation, subpoena, court order, or lawful government request.",
"As part of a corporate transaction such as a merger, restructuring, or asset transfer, subject to applicable safeguards."
]
},
{
"title": "7. International Transfers",
"paragraphs": [
"Yumi may use systems, vendors, and support workflows that operate across different jurisdictions. Where personal information is transferred internationally, we take reasonable steps to apply appropriate contractual, technical, and organizational safeguards."
]
},
{
"title": "8. Data Retention",
"paragraphs": [
"We retain personal information for as long as necessary to provide services, fulfill account functions, maintain business records, resolve disputes, prevent abuse, enforce agreements, or comply with legal obligations.",
"Retention periods may vary depending on the type of data, the sensitivity of the data, and the operational or legal reason for retaining it."
]
},
{
"title": "9. Security",
"paragraphs": [
"We use reasonable administrative, technical, and organizational measures to protect information against unauthorized access, misuse, alteration, disclosure, or destruction. However, no method of transmission or storage can be guaranteed to be completely secure."
]
},
{
"title": "10. Your Rights and Choices",
"paragraphs": [
"Subject to applicable law, users may request access, correction, deletion, restriction, objection, portability, or withdrawal of consent for certain data-processing activities."
],
"bullets": [
"You may review and update some profile information directly inside the app.",
"You may request account deletion or data deletion by contacting postmaster@haiyinet.com.cn.",
"We may need to verify identity before responding to certain requests."
]
},
{
"title": "11. Children's Privacy",
"paragraphs": [
"Yumi is not intended for children who are below the minimum age permitted under applicable law in the relevant market. If you believe a child has provided personal information to Yumi inappropriately, please contact postmaster@haiyinet.com.cn."
]
},
{
"title": "12. Third-Party Services",
"paragraphs": [
"Yumi may integrate third-party services for login, messaging, analytics, purchases, or social sharing. Their data practices are governed by their own terms and privacy notices."
]
},
{
"title": "13. Policy Updates",
"paragraphs": [
"We may update this Privacy Policy from time to time. The updated version will be posted on this page with a revised effective date."
]
}
]
},
"terms": {
"title": "Terms of Service",
"summary": "These Terms of Service govern access to and use of the Yumi app, website, H5 pages, and related services.",
"sections": [
{
"title": "1. Acceptance of Terms",
"paragraphs": [
"By accessing or using Yumi, you agree to comply with these Terms of Service and all applicable laws."
]
},
{
"title": "2. Eligibility",
"paragraphs": [
"You must be legally permitted to use the service in your jurisdiction and satisfy the minimum age requirement applicable to your market."
]
},
{
"title": "3. Account Responsibilities",
"bullets": [
"You are responsible for activity under your account.",
"You must provide accurate information where required.",
"You must not use Yumi for unlawful, abusive, fraudulent, or platform-disruptive behavior."
]
},
{
"title": "4. User Content and Room Activity",
"paragraphs": [
"You retain responsibility for content you upload, publish, stream, or otherwise make available through Yumi, including room details, text, images, chat content, and other materials.",
"You must have the right to share the content you upload and the right to participate in or operate the room activity you initiate."
]
},
{
"title": "5. Purchases and Virtual Items",
"paragraphs": [
"Certain services may involve paid content, subscriptions, in-app purchases, or virtual items. Additional purchase terms may apply through the relevant app-store provider.",
"Except where required by law or expressly stated otherwise, virtual items and in-app balances are non-transferable and non-refundable."
]
},
{
"title": "6. Moderation and Enforcement",
"paragraphs": [
"We may suspend, restrict, remove, or terminate access to content, rooms, accounts, campaigns, or features where reasonably necessary to protect the platform, respond to abuse, or comply with legal or platform requirements."
]
},
{
"title": "7. Service Availability",
"paragraphs": [
"We may modify, suspend, or discontinue any part of Yumi at any time. We do not guarantee that the service will always be uninterrupted or error-free."
]
},
{
"title": "8. Intellectual Property",
"paragraphs": [
"All platform branding, software, design, trademarks, operational materials, and related content remain the property of Yumi or its licensors unless otherwise stated."
]
},
{
"title": "9. Disclaimer",
"paragraphs": [
"To the maximum extent allowed by law, Yumi is provided on an as-available basis without warranties of any kind, whether express or implied."
]
},
{
"title": "10. Contact",
"paragraphs": [
"For service questions or legal notices, contact postmaster@haiyinet.com.cn or call +85256283162."
]
}
]
},
"deleteAccount": {
"title": "Delete Yumi Account",
"summary": "This page explains how Yumi users can request permanent deletion of their account and associated data.",
"sections": [
{
"title": "1. Who can use this page",
"paragraphs": [
"Use this page if you created a Yumi account and want to request permanent deletion of that account and the associated user data managed by Yumi.",
"You can submit a deletion request even if you no longer have access to the Yumi app on your device."
]
},
{
"title": "2. How to submit a deletion request",
"paragraphs": [
"Send your deletion request by email to postmaster@haiyinet.com.cn.",
"Please use the subject line: Delete Yumi Account."
],
"bullets": [
"Your Yumi UID, if available.",
"Your registered email address or phone number.",
"Your Yumi nickname or profile name.",
"A clear statement that you want your Yumi account and associated data to be deleted."
]
},
{
"title": "3. Identity verification",
"paragraphs": [
"To protect account security and prevent unauthorized deletion, we may ask you to complete a reasonable identity-verification step before processing your request."
]
},
{
"title": "4. What will be deleted",
"paragraphs": [
"After your request is verified and approved, we will delete your Yumi account and the associated account data that is managed in our systems, including profile information and other user data linked to that account, unless retention is required for legitimate reasons described below."
]
},
{
"title": "5. Data that may be retained",
"paragraphs": [
"Certain records may be retained for a limited period where reasonably necessary for fraud prevention, abuse handling, dispute resolution, financial recordkeeping, tax, security, or legal and regulatory compliance."
]
},
{
"title": "6. Processing time",
"paragraphs": [
"We aim to complete verified deletion requests within 7 business days, although certain cases may require additional time if further verification or compliance review is necessary."
]
},
{
"title": "7. Contact",
"paragraphs": [
"If you have questions about account deletion or personal-data handling, contact postmaster@haiyinet.com.cn or call +85256283162."
]
}
]
},
"childSafety": {
"title": "Yumi Child Safety Standards",
"summary": "This page publishes Yumi's standards against child sexual abuse and exploitation, including reporting and enforcement expectations for the service.",
"sections": [
{
"title": "1. Scope",
"paragraphs": [
"This Child Safety Standards page applies to the Yumi application and related services operated by 環球互動科技有限公司 (Global Interactive Technology Co., Limited).",
"These standards are publicly published for users, reviewers, partners, and regulators who need to understand how Yumi addresses child sexual abuse and exploitation."
]
},
{
"title": "2. Zero-tolerance standard",
"paragraphs": [
"Yumi has zero tolerance for child sexual abuse and exploitation (CSAE), child sexual abuse material (CSAM), grooming, sextortion involving minors, trafficking of children for sexual purposes, or any content or behavior that sexually exploits, abuses, or endangers children."
]
},
{
"title": "3. Prohibited content and behavior",
"paragraphs": [
"Users may not create, upload, publish, distribute, request, promote, facilitate, or engage in any content or conduct involving the sexual exploitation or abuse of children."
],
"bullets": [
"Child sexual abuse material (CSAM), whether real, manipulated, or computer-generated where prohibited by law or policy.",
"Grooming, solicitation, or sexualized communication involving a minor.",
"Sextortion, blackmail, or coercion involving a minor.",
"Advertising, arranging, or facilitating trafficking or commercial sexual exploitation of children.",
"Any attempt to use Yumi to endanger, exploit, or abuse a child."
]
},
{
"title": "4. Reporting channels",
"paragraphs": [
"Yumi provides in-app reporting and support pathways for users to report suspected violations.",
"Users, reviewers, or partners may also report child safety concerns by contacting postmaster@haiyinet.com.cn."
]
},
{
"title": "5. Enforcement and response",
"paragraphs": [
"Yumi reviews reports and takes appropriate action when violations are identified or when the service obtains actual knowledge of prohibited child safety content or behavior."
],
"bullets": [
"Removing violating content.",
"Restricting, suspending, or permanently terminating offending accounts.",
"Preserving relevant records when reasonably necessary for investigation, legal compliance, or platform integrity.",
"Escalating confirmed violations to relevant authorities or reporting organizations where required by applicable law."
]
},
{
"title": "6. Contact information",
"paragraphs": [
"Developer and operator: Global Interactive Technology Co., Limited.",
"Company email: postmaster@haiyinet.com.cn.",
"Support phone: +85256283162.",
"Registered address: 中国香港环球大厦A01."
]
}
]
}
}

View File

@ -1,128 +0,0 @@
{
"generatedAt": "2026-04-13",
"brand": {
"name": "Yumi",
"strapline": "Internet technology and information services for live social products.",
"description": "Yumi is a live social product operated within an internet technology and information service model, combining voice rooms, direct chat, campaign H5 funnels, and community interaction tools."
},
"company": {
"legalNameCn": "環球互動科技有限公司",
"legalNameEn": "Global Interactive Technology Co., Limited",
"address": "中国香港环球大厦A01",
"website": "https://www.haiyihy.com",
"h5Website": "https://h5.haiyihy.com",
"supportEmail": "postmaster@haiyinet.com.cn",
"privacyEmail": "postmaster@haiyinet.com.cn",
"phone": "+85256283162",
"industry": "Internet technology and information services"
},
"app": {
"packageName": "com.org.yumi",
"googlePlayUrl": "https://play.google.com/store/apps/details?id=com.org.yumi",
"apiBase": "https://jvapi.haiyihy.com"
},
"hero": {
"eyebrow": "Internet technology and information services",
"title": "To Build Trusted Digital Interaction Worldwide",
"summary": "Global Interactive Technology Co., Limited provides internet technology and information services for live social products, official web presence, and digital campaign delivery.",
"primaryCta": {
"label": "Open Google Play",
"href": "https://play.google.com/store/apps/details?id=com.org.yumi"
},
"secondaryCta": {
"label": "Read Privacy Policy",
"href": "https://h5.haiyihy.com/privacy.html"
},
"stats": [
{
"value": "24/7",
"label": "always-on room activity design"
},
{
"value": "Real-time",
"label": "voice, chat, gifting, and room state"
},
{
"value": "One stack",
"label": "app, H5 campaigns, and public presence"
}
]
},
"pillars": [
{
"title": "Live Voice Rooms",
"body": "Users can create rooms, go on mic, manage room roles, run themed sessions, and keep conversations active with lightweight social mechanics."
},
{
"title": "Direct Chat and Social Graph",
"body": "Yumi supports private chat, social follow relationships, and community discovery flows that keep users returning between live sessions."
},
{
"title": "Campaign-Ready H5 Pages",
"body": "Operational pages for hosts, agencies, invitations, rankings, and growth programs can be published quickly without rebuilding the app."
}
],
"audiences": [
{
"title": "Users",
"body": "Join rooms, meet people, chat, participate in events, and unlock social progression with a mobile-first experience."
},
{
"title": "Hosts",
"body": "Run rooms, grow a following, manage member interactions, and activate campaigns from dedicated host-focused H5 funnels."
},
{
"title": "Operators",
"body": "Launch landing pages, direct users into campaigns, and keep public legal pages aligned with app review and external communication requirements."
}
],
"featureGrid": [
{
"kicker": "Room lifecycle",
"title": "Create, enter, moderate, and personalize rooms.",
"body": "Room profiles, room announcements, room themes, room roles, and room-based monetization all sit inside the same engagement model."
},
{
"kicker": "Social retention",
"title": "Keep users active after the conversation ends.",
"body": "Private chat, follow relationships, user discovery, and event-based rewards extend participation beyond a single room session."
},
{
"kicker": "Growth operations",
"title": "Launch H5 campaigns without touching app binaries.",
"body": "Invite funnels, ranking pages, host programs, and agency acquisition pages can be edited as JSON-driven content and republished quickly."
}
],
"operationLinks": [
{
"title": "Host Application",
"href": "https://h5.haiyihy.com/apply/"
},
{
"title": "Host Center",
"href": "https://h5.haiyihy.com/host-center/"
},
{
"title": "Agency Center",
"href": "https://h5.haiyihy.com/agency-center/"
},
{
"title": "Invite New User",
"href": "https://h5.haiyihy.com/invite-new-user/"
}
],
"faq": [
{
"question": "What is Yumi?",
"answer": "Yumi is a mobile social audio application focused on voice rooms, chat, community interaction, and in-app campaigns."
},
{
"question": "Where can I find legal information?",
"answer": "You can review the Privacy Policy and Terms of Service directly on this site. These pages are intended to be used both by end users and app review teams."
},
{
"question": "How are H5 pages managed?",
"answer": "The current setup uses one JSON content file per landing page. That keeps publishing fast and avoids coupling campaign updates to Flutter app releases."
}
]
}

View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A public-facing operations handoff page for admin and campaign distribution needs. | Yumi H5</title>
<meta name="description" content="Use this page as a lightweight web entrance when the final system sits behind internal tools or role-based access.">
<link rel="canonical" href="https://h5.haiyihy.com/admin-center/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="steel">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Operations gateway</div>
<h1 class="landing-title">A public-facing operations handoff page for admin and campaign distribution needs.</h1>
<p class="landing-lead">Use this page as a lightweight web entrance when the final system sits behind internal tools or role-based access.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Public shell</strong> · for internal-operation entry design</div><div class="meta-chip"><strong>Reusable</strong> · for future operational routing</div>
</div>
<div class="landing-banner">
<p>Separates public routing and internal operations cleanly.</p>
</div>
<div class="actions">
<a class="button" href="https://www.haiyihy.com/">Official Website</a>
<a class="button-secondary" href="https://h5.haiyihy.com/host-center/">Host Center</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Controlled access</h3>
<p>Keep actual admin systems private while still presenting a clear, branded public-facing handoff page when needed.</p>
</section>
<section class="section-card">
<h3>Simple maintenance</h3>
<p>Because the content is generated from JSON, copy and target links can be revised quickly.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A clear H5 entry for agencies, channel partners, and growth collaborators. | Yumi H5</title>
<meta name="description" content="Use this page to explain the agency model, onboarding expectations, communication channels, and next actions.">
<link rel="canonical" href="https://h5.haiyihy.com/agency-center/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="violet">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Agency program</div>
<h1 class="landing-title">A clear H5 entry for agencies, channel partners, and growth collaborators.</h1>
<p class="landing-lead">Use this page to explain the agency model, onboarding expectations, communication channels, and next actions.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Partner</strong> · orientation and conversion flow</div><div class="meta-chip"><strong>Flexible</strong> · content for region-specific campaigns</div>
</div>
<div class="landing-banner">
<p>Tailored for channel-driven growth programs and partner onboarding.</p>
</div>
<div class="actions">
<a class="button" href="https://h5.haiyihy.com/bd-center/">Open BD Center</a>
<a class="button-secondary" href="https://h5.haiyihy.com/invite-new-user/">Invite New Users</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Program framing</h3>
<p>This page can communicate eligibility, relationship structure, reward model, and operational expectations.</p>
</section>
<section class="section-card">
<h3>Campaign agility</h3>
<p>You can run multiple variants over time while keeping the page system stable and easy to maintain.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

88
h5/apply/index.html Normal file
View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Apply to become a Yumi host and start your own voice room community. | Yumi H5</title>
<meta name="description" content="Designed for creators who want to host conversations, run themed rooms, and grow an audience around live social interaction.">
<link rel="canonical" href="https://h5.haiyihy.com/apply/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="ember">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Host recruitment</div>
<h1 class="landing-title">Apply to become a Yumi host and start your own voice room community.</h1>
<p class="landing-lead">Designed for creators who want to host conversations, run themed rooms, and grow an audience around live social interaction.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Live</strong> · voice-room-first host workflow</div><div class="meta-chip"><strong>Flexible</strong> · community and event formats</div>
</div>
<div class="landing-banner">
<p>Fast onboarding for hosts, room operators, and community starters.</p>
</div>
<div class="actions">
<a class="button" href="https://play.google.com/store/apps/details?id=com.org.yumi">Download Yumi</a>
<a class="button-secondary" href="https://h5.haiyihy.com/host-center/">View Host Center</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Who this is for</h3>
<p>Hosts who can bring conversation energy, build room identity, and keep users engaged through recurring activities.</p>
<ul><li>Run voice rooms and themed sessions</li><li>Build your own regular audience rhythm</li><li>Participate in campaigns and operational support</li></ul>
</section>
<section class="section-card">
<h3>What you get</h3>
<p>Yumi is built to support the host lifecycle from room setup to room growth and activity retention.</p>
<ul><li>Room profile and room settings support</li><li>Mic, member, and room interaction tools</li><li>Campaign entry points connected to H5 funnels</li></ul>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

88
h5/bd-center/index.html Normal file
View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A campaign-ready H5 entrance for BD activities and partner growth. | Yumi H5</title>
<meta name="description" content="Use this page to brief BD participants, explain deliverables, and connect external traffic into measurable operational flows.">
<link rel="canonical" href="https://h5.haiyihy.com/bd-center/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="forest">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Business development</div>
<h1 class="landing-title">A campaign-ready H5 entrance for BD activities and partner growth.</h1>
<p class="landing-lead">Use this page to brief BD participants, explain deliverables, and connect external traffic into measurable operational flows.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Partner-ready</strong> · external communication format</div><div class="meta-chip"><strong>Structured</strong> · clear calls to action</div>
</div>
<div class="landing-banner">
<p>Built for acquisition, activation, and channel-based growth operations.</p>
</div>
<div class="actions">
<a class="button" href="https://h5.haiyihy.com/agency-center/">Open Agency Center</a>
<a class="button-secondary" href="https://h5.haiyihy.com/invite-new-user/">Invite New Users</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Operational clarity</h3>
<p>Use this page to define the audience, reward logic, participation steps, and submission or review flows.</p>
</section>
<section class="section-card">
<h3>Fast reconfiguration</h3>
<p>Swap campaign copy, target region language, and CTA links by editing content files instead of rebuilding the app.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A structured overview page for BD leaders managing multiple contributors or growth tracks. | Yumi H5</title>
<meta name="description" content="Ideal for summarizing current focus areas, reporting expectations, onboarding standards, and campaign coordination notes.">
<link rel="canonical" href="https://h5.haiyihy.com/bd-leader-center/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="ink">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Leadership view</div>
<h1 class="landing-title">A structured overview page for BD leaders managing multiple contributors or growth tracks.</h1>
<p class="landing-lead">Ideal for summarizing current focus areas, reporting expectations, onboarding standards, and campaign coordination notes.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Manager</strong> · orientation layer for BD leadership</div><div class="meta-chip"><strong>Reusable</strong> · template for future operations</div>
</div>
<div class="landing-banner">
<p>A cleaner destination for management-level communication and rollout guidance.</p>
</div>
<div class="actions">
<a class="button" href="https://h5.haiyihy.com/bd-center/">Open BD Center</a>
<a class="button-secondary" href="https://h5.haiyihy.com/agency-center/">Agency Center</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Use cases</h3>
<p>Campaign kickoff notes, team dashboards, policy reminders, or coordination pages can all be routed through this destination.</p>
</section>
<section class="section-card">
<h3>Editorial control</h3>
<p>Each page is file-driven, so operational owners can prepare a release-ready content update without touching layout code.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

49
h5/child-safety.html Normal file
View File

@ -0,0 +1,49 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Yumi Child Safety Standards | Yumi</title>
<meta name="description" content="This page publishes Yumi&#39;s standards against child sexual abuse and exploitation, including reporting and enforcement expectations for the service.">
<link rel="canonical" href="https://h5.haiyihy.com/child-safety.html">
</head>
<body>
<h1>Yumi Child Safety Standards</h1>
<p>Effective date: 2026-04-13</p>
<p>Operator: Global Interactive Technology Co., Limited (環球互動科技有限公司)</p>
<p>Address: 中国香港环球大厦A01</p>
<p>Contact: postmaster@haiyinet.com.cn / +85256283162</p>
<p>This page publishes Yumi&#39;s standards against child sexual abuse and exploitation, including reporting and enforcement expectations for the service.</p>
<h2>1. Scope</h2>
<p>This Child Safety Standards page applies to the Yumi application and related services operated by 環球互動科技有限公司 (Global Interactive Technology Co., Limited).</p><p>These standards are publicly published for users, reviewers, partners, and regulators who need to understand how Yumi addresses child sexual abuse and exploitation.</p>
<h2>2. Zero-tolerance standard</h2>
<p>Yumi has zero tolerance for child sexual abuse and exploitation (CSAE), child sexual abuse material (CSAM), grooming, sextortion involving minors, trafficking of children for sexual purposes, or any content or behavior that sexually exploits, abuses, or endangers children.</p>
<h2>3. Prohibited content and behavior</h2>
<p>Users may not create, upload, publish, distribute, request, promote, facilitate, or engage in any content or conduct involving the sexual exploitation or abuse of children.</p>
<p>- Child sexual abuse material (CSAM), whether real, manipulated, or computer-generated where prohibited by law or policy.</p><p>- Grooming, solicitation, or sexualized communication involving a minor.</p><p>- Sextortion, blackmail, or coercion involving a minor.</p><p>- Advertising, arranging, or facilitating trafficking or commercial sexual exploitation of children.</p><p>- Any attempt to use Yumi to endanger, exploit, or abuse a child.</p>
<h2>4. Reporting channels</h2>
<p>Yumi provides in-app reporting and support pathways for users to report suspected violations.</p><p>Users, reviewers, or partners may also report child safety concerns by contacting postmaster@haiyinet.com.cn.</p>
<h2>5. Enforcement and response</h2>
<p>Yumi reviews reports and takes appropriate action when violations are identified or when the service obtains actual knowledge of prohibited child safety content or behavior.</p>
<p>- Removing violating content.</p><p>- Restricting, suspending, or permanently terminating offending accounts.</p><p>- Preserving relevant records when reasonably necessary for investigation, legal compliance, or platform integrity.</p><p>- Escalating confirmed violations to relevant authorities or reporting organizations where required by applicable law.</p>
<h2>6. Contact information</h2>
<p>Developer and operator: Global Interactive Technology Co., Limited.</p><p>Company email: postmaster@haiyinet.com.cn.</p><p>Support phone: +85256283162.</p><p>Registered address: 中国香港环球大厦A01.</p>
</body>
</html>

88
h5/coin-seller/index.html Normal file
View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A dedicated funnel page for coin sales, recharge guidance, and payment-related campaigns. | Yumi H5</title>
<meta name="description" content="Use this landing page to explain transaction steps, campaign windows, purchase support, and payment channel notices.">
<link rel="canonical" href="https://h5.haiyihy.com/coin-seller/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="gold">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Sales and recharge</div>
<h1 class="landing-title">A dedicated funnel page for coin sales, recharge guidance, and payment-related campaigns.</h1>
<p class="landing-lead">Use this landing page to explain transaction steps, campaign windows, purchase support, and payment channel notices.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Payment-ready</strong> · for purchase and recharge communication</div><div class="meta-chip"><strong>Clear</strong> · support escalation path</div>
</div>
<div class="landing-banner">
<p>Useful for external campaign links where a direct app-store page is too generic.</p>
</div>
<div class="actions">
<a class="button" href="https://play.google.com/store/apps/details?id=com.org.yumi">Open Google Play</a>
<a class="button-secondary" href="mailto:support@haiyihy.com">Support Email</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Payment communication</h3>
<p>Summarize recharge channels, availability windows, support methods, and any temporary campaign mechanics in one stable page.</p>
</section>
<section class="section-card">
<h3>Review-safe</h3>
<p>For compliance-sensitive launches, this page can carry explanatory copy without changing in-app billing logic.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1 @@
.bg-layer[data-v-613f8de2]{width:100vw;min-height:100vh;position:absolute;top:0;left:0;z-index:0;pointer-events:none}.bg-image[data-v-613f8de2]{width:100vw;object-fit:cover;object-position:center top;display:block}

View File

@ -0,0 +1 @@
@charset "UTF-8";[data-v-7e43213b]{color:#000}.showText[data-v-7e43213b]{color:#fff;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.top1Text[data-v-7e43213b]{font-size:.9em}.text[data-v-7e43213b]{font-size:.7em}@media screen and (max-width:360px){[data-v-7e43213b]{font-size:10px}}@media screen and (min-width:360px){[data-v-7e43213b]{font-size:12px}}@media screen and (min-width:768px){[data-v-7e43213b]{font-size:24px}}@media screen and (min-width:1024px){[data-v-7e43213b]{font-size:32px}}[data-v-93c53aed]{color:#fff}.fullPage[data-v-93c53aed]{width:100vw;min-height:100vh;background-size:100% auto;background-repeat:no-repeat;position:relative;background:#000}.tab[data-v-93c53aed]{font-weight:700;font-size:1em}.tabItem[data-v-93c53aed]{display:flex;justify-content:center;align-items:center}.tag[data-v-93c53aed]{font-weight:510;padding:4px 10px}.tagActive[data-v-93c53aed]{color:#000;display:flex;justify-content:center;align-items:center}.stuck[data-v-93c53aed]{background-color:#ffffff1a;-webkit-backdrop-filter:blur(32px);backdrop-filter:blur(32px)}.loading-container[data-v-93c53aed]{width:100vw;height:100vh;display:flex;flex-direction:column;justify-content:center;align-items:center;color:#666;overflow:hidden;position:relative}@media screen and (max-width:360px){[data-v-93c53aed]{font-size:10px}}@media screen and (min-width:360px){[data-v-93c53aed]{font-size:14px}}@media screen and (min-width:768px){[data-v-93c53aed]{font-size:24px}}@media screen and (min-width:1024px){[data-v-93c53aed]{font-size:32px}}

View File

@ -0,0 +1 @@
:root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}@media(prefers-color-scheme:dark){:root{--color-background: var(--vt-c-black);--color-background-soft: var(--vt-c-black-soft);--color-background-mute: var(--vt-c-black-mute);--color-border: var(--vt-c-divider-dark-2);--color-border-hover: var(--vt-c-divider-dark-1);--color-heading: var(--vt-c-text-dark-1);--color-text: var(--vt-c-text-dark-2)}}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100vh;color:var(--color-text);background:var(--color-background);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{max-width:1280px;margin:0 auto;padding:2rem;font-weight:400}a,.green{text-decoration:none;color:#00bd7e;transition:.4s;padding:3px}@media(hover:hover){a:hover{background-color:#00bd7e33}}@media(min-width:1024px){body{display:flex;place-items:center}#app{display:grid;grid-template-columns:1fr 1fr;padding:0 2rem}}@font-face{font-family:"Baloo 2";src:url(/assets/BalooDa2-Regular-Da9EMwmM-1776148661447.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"Baloo 2";src:url(/assets/BalooDa2-Medium-SHzJrXPy-1776148661447.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:"Baloo 2";src:url(/assets/BalooDa2-SemiBold-B7mlaStc-1776148661447.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:"Baloo 2";src:url(/assets/BalooDa2-Bold-ChYvdM8z-1776148661447.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:"Baloo 2";src:url(/assets/BalooDa2-ExtraBold-B62XCcbl-1776148661447.ttf) format("truetype");font-weight:800;font-style:normal;font-display:swap}html{font-family:"Baloo 2",-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.4}body{font-family:"Baloo 2",-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;margin:0;padding:0;line-height:1.4;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{font-family:"Baloo 2",-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.4}*{margin:0;padding:0;box-sizing:border-box}html,body{margin:0;padding:0;width:100%;height:100%;font-family:"Baloo 2",-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.4;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent;overflow-x:hidden}#app{width:100%;min-height:100vh;margin:0;padding:0;font-family:"Baloo 2",-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.loading-spinner-image[data-v-3357a72e]{position:relative;z-index:1;display:block;object-fit:contain}

View File

@ -0,0 +1 @@
.placeholder[data-v-5f334255]{transition:opacity .3s ease}.scrollY[data-v-5f334255]::-webkit-scrollbar{display:none}[dir=rtl] .flipImg[data-v-5f334255]{transform:scaleX(-1)}

54
h5/delete-account.html Normal file
View File

@ -0,0 +1,54 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Delete Yumi Account | Yumi</title>
<meta name="description" content="This page explains how Yumi users can request permanent deletion of their account and associated data.">
<link rel="canonical" href="https://h5.haiyihy.com/delete-account.html">
</head>
<body>
<h1>Delete Yumi Account</h1>
<p>Effective date: 2026-04-13</p>
<p>Operator: Global Interactive Technology Co., Limited (環球互動科技有限公司)</p>
<p>Address: 中国香港环球大厦A01</p>
<p>Contact: postmaster@haiyinet.com.cn / +85256283162</p>
<p><a href="mailto:postmaster@haiyinet.com.cn?subject=Delete%20Yumi%20Account">Start a deletion request by email</a></p>
<p>This page explains how Yumi users can request permanent deletion of their account and associated data.</p>
<h2>1. Who can use this page</h2>
<p>Use this page if you created a Yumi account and want to request permanent deletion of that account and the associated user data managed by Yumi.</p><p>You can submit a deletion request even if you no longer have access to the Yumi app on your device.</p>
<h2>2. How to submit a deletion request</h2>
<p>Send your deletion request by email to postmaster@haiyinet.com.cn.</p><p>Please use the subject line: Delete Yumi Account.</p>
<p>- Your Yumi UID, if available.</p><p>- Your registered email address or phone number.</p><p>- Your Yumi nickname or profile name.</p><p>- A clear statement that you want your Yumi account and associated data to be deleted.</p>
<h2>3. Identity verification</h2>
<p>To protect account security and prevent unauthorized deletion, we may ask you to complete a reasonable identity-verification step before processing your request.</p>
<h2>4. What will be deleted</h2>
<p>After your request is verified and approved, we will delete your Yumi account and the associated account data that is managed in our systems, including profile information and other user data linked to that account, unless retention is required for legitimate reasons described below.</p>
<h2>5. Data that may be retained</h2>
<p>Certain records may be retained for a limited period where reasonably necessary for fraud prevention, abuse handling, dispute resolution, financial recordkeeping, tax, security, or legal and regulatory compliance.</p>
<h2>6. Processing time</h2>
<p>We aim to complete verified deletion requests within 7 business days, although certain cases may require additional time if further verification or compliance review is necessary.</p>
<h2>7. Contact</h2>
<p>If you have questions about account deletion or personal-data handling, contact postmaster@haiyinet.com.cn or call +85256283162.</p>
</body>
</html>

88
h5/games-king/index.html Normal file
View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A landing page slot for game-focused events, rankings, and seasonal engagement campaigns. | Yumi H5</title>
<meta name="description" content="Use this destination for mini-game promotions, challenge seasons, rankings, and cross-room participation drives.">
<link rel="canonical" href="https://h5.haiyihy.com/games-king/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="berry">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Games campaign</div>
<h1 class="landing-title">A landing page slot for game-focused events, rankings, and seasonal engagement campaigns.</h1>
<p class="landing-lead">Use this destination for mini-game promotions, challenge seasons, rankings, and cross-room participation drives.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Seasonal</strong> · for event-based traffic spikes</div><div class="meta-chip"><strong>Lightweight</strong> · copy-first promotional format</div>
</div>
<div class="landing-banner">
<p>Designed for event storytelling rather than dense system UI.</p>
</div>
<div class="actions">
<a class="button" href="https://h5.haiyihy.com/rankings-rooms/">Open Room Rankings</a>
<a class="button-secondary" href="https://h5.haiyihy.com/rankings-wealth/">Open Wealth Rankings</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Event-ready</h3>
<p>Turn this page into a game season hub, contest explainer, or campaign teaser with one content update.</p>
</section>
<section class="section-card">
<h3>Cross-linkable</h3>
<p>It can point users into rankings, invitation flows, room events, or download paths.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

88
h5/host-center/index.html Normal file
View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A central landing page for creators, room owners, and active hosts. | Yumi H5</title>
<meta name="description" content="Use this page as the distribution point for host-facing updates, onboarding steps, room guidance, and operational notices.">
<link rel="canonical" href="https://h5.haiyihy.com/host-center/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="sapphire">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Host operations</div>
<h1 class="landing-title">A central landing page for creators, room owners, and active hosts.</h1>
<p class="landing-lead">Use this page as the distribution point for host-facing updates, onboarding steps, room guidance, and operational notices.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>1 page</strong> · for recurring host communication</div><div class="meta-chip"><strong>Low friction</strong> · distribution from app and campaigns</div>
</div>
<div class="landing-banner">
<p>A stable host-facing H5 entry point linked directly from the app.</p>
</div>
<div class="actions">
<a class="button" href="https://h5.haiyihy.com/apply/">Apply as Host</a>
<a class="button-secondary" href="https://h5.haiyihy.com/privacy.html">Privacy Policy</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Use it as a routing hub</h3>
<p>This page can carry current season rules, host incentives, room standards, or updated activity instructions without shipping a new app build.</p>
</section>
<section class="section-card">
<h3>Keep copy editable</h3>
<p>The page content lives directly in this HTML page so operators can adjust copy, links, and highlights in git without a generator step.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

150
h5/index.html Normal file
View File

@ -0,0 +1,150 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Yumi H5 | Campaign Pages</title>
<meta name="description" content="Index of Yumi H5 landing pages.">
<link rel="canonical" href="https://h5.haiyihy.com/">
<link rel="stylesheet" href="assets/site.css">
</head>
<body data-theme="sapphire">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing pages</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Operations and campaigns</div>
<h1 class="landing-title">A structured index of all public H5 destinations.</h1>
<p class="landing-lead">Each page below is a checked-in static HTML destination that can be edited and published directly from git.</p>
<div class="landing-grid" style="margin-top: 28px;">
<a class="link-card" href="/admin-center/">
<small>Operations gateway</small>
<h3>A public-facing operations handoff page for admin and campaign distribution needs.</h3>
<p>Use this page as a lightweight web entrance when the final system sits behind internal tools or role-based access.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/agency-center/">
<small>Agency program</small>
<h3>A clear H5 entry for agencies, channel partners, and growth collaborators.</h3>
<p>Use this page to explain the agency model, onboarding expectations, communication channels, and next actions.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/apply/">
<small>Host recruitment</small>
<h3>Apply to become a Yumi host and start your own voice room community.</h3>
<p>Designed for creators who want to host conversations, run themed rooms, and grow an audience around live social interaction.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/bd-center/">
<small>Business development</small>
<h3>A campaign-ready H5 entrance for BD activities and partner growth.</h3>
<p>Use this page to brief BD participants, explain deliverables, and connect external traffic into measurable operational flows.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/bd-leader-center/">
<small>Leadership view</small>
<h3>A structured overview page for BD leaders managing multiple contributors or growth tracks.</h3>
<p>Ideal for summarizing current focus areas, reporting expectations, onboarding standards, and campaign coordination notes.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/coin-seller/">
<small>Sales and recharge</small>
<h3>A dedicated funnel page for coin sales, recharge guidance, and payment-related campaigns.</h3>
<p>Use this landing page to explain transaction steps, campaign windows, purchase support, and payment channel notices.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/games-king/">
<small>Games campaign</small>
<h3>A landing page slot for game-focused events, rankings, and seasonal engagement campaigns.</h3>
<p>Use this destination for mini-game promotions, challenge seasons, rankings, and cross-room participation drives.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/host-center/">
<small>Host operations</small>
<h3>A central landing page for creators, room owners, and active hosts.</h3>
<p>Use this page as the distribution point for host-facing updates, onboarding steps, room guidance, and operational notices.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/invite-new-user/">
<small>Growth funnel</small>
<h3>A clean invitation page for user acquisition, referral campaigns, and onboarding traffic.</h3>
<p>Use this page to tell new users what Yumi is, why they should join, and where the invite flow leads next.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/rankings-charm/">
<small>Rankings</small>
<h3>A dedicated landing page slot for charm campaigns, profile visibility pushes, and social leaderboard events.</h3>
<p>Use this page when the campaign angle is social presence, room influence, or creator energy rather than pure spend.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/rankings-rooms/">
<small>Rankings</small>
<h3>A room-ranking campaign page for spotlighting active communities, top rooms, and themed room competitions.</h3>
<p>Useful when you want to explain what the room ranking means before sending users into the app experience.</p>
<span>Open page</span>
</a>
<a class="link-card" href="/rankings-wealth/">
<small>Rankings</small>
<h3>A public landing page for wealth-themed campaigns, visibility pushes, and leaderboard storytelling.</h3>
<p>Use this URL when you need a branded web destination for top-spender or premium-activity campaigns before routing users back into the app.</p>
<span>Open page</span>
</a>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A clean invitation page for user acquisition, referral campaigns, and onboarding traffic. | Yumi H5</title>
<meta name="description" content="Use this page to tell new users what Yumi is, why they should join, and where the invite flow leads next.">
<link rel="canonical" href="https://h5.haiyihy.com/invite-new-user/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="mint">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Growth funnel</div>
<h1 class="landing-title">A clean invitation page for user acquisition, referral campaigns, and onboarding traffic.</h1>
<p class="landing-lead">Use this page to tell new users what Yumi is, why they should join, and where the invite flow leads next.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Referral</strong> · friendly landing format</div><div class="meta-chip"><strong>App-first</strong> · clear user conversion path</div>
</div>
<div class="landing-banner">
<p>Built for referral links, community invite traffic, and campaign attribution handoffs.</p>
</div>
<div class="actions">
<a class="button" href="https://play.google.com/store/apps/details?id=com.org.yumi">Download Yumi</a>
<a class="button-secondary" href="https://www.haiyihy.com/">Official Website</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>What this page should do</h3>
<p>Explain the value of Yumi quickly, remove ambiguity for first-time visitors, and route them cleanly into app installation.</p>
</section>
<section class="section-card">
<h3>How to operate it</h3>
<p>Adjust headline, incentive copy, and campaign validity in JSON whenever a new invite program starts.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1 @@
import{_ as u,j as r,c as s,F as m,x as g,D as d,n as c,Q as y,S as f,an as p}from"./index-CIAVq8iD-1776148658686.js";const k=["src","alt"],_={__name:"BackgroundLayer",props:{backgroundImages:{type:Array,required:!0,default:()=>[]},layerStyle:{type:Object,default:()=>({})},imageStyle:{type:Object,default:()=>({})},imageClass:{type:String,default:""},filterEmpty:{type:Boolean,default:!0}},setup(e){const t=e,n=f(()=>t.filterEmpty?t.backgroundImages.filter(a=>a&&a.trim()!==""):t.backgroundImages);return(a,b)=>{const i=p("smart-img");return r(),s("div",{class:"bg-layer",style:c(e.layerStyle)},[(r(!0),s(m,null,g(n.value,(o,l)=>d((r(),s("img",{key:l,src:o,alt:`background-${l}`,class:y(["bg-image",e.imageClass]),style:c(e.imageStyle)},null,14,k)),[[i]])),128))],4)}}},B=u(_,[["__scopeId","data-v-613f8de2"]]);export{B};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{i as f,ae as g,af as h,g as n,e as m,p as b,f as P,s as w,au as y,aJ as A,u as C}from"./index-CIAVq8iD-1776148658686.js";const v=C(),H=e=>{e.message&&e.message.includes("parse access")&&v.push({path:"/not_app",query:{message:e.message}})},r=async()=>{try{console.debug("👤 Fetching user info after connection...");const e=await y();e&&e.status&&e.body?(console.debug("✅ User info cached successfully"),A(e.body,null)):console.warn("⚠️ Failed to get team entry or invalid response")}catch(e){console.warn("⚠️ Failed to fetch user info after connection:",e)}},I=async(e,c=H)=>{console.group("🔗 APP Connection Process"),console.debug("🚀 Starting APP connection...");try{if(!f())return console.debug("🌐 Browser environment detected"),await w({authorization:"",reqLang:navigator.language&&navigator.language.toLowerCase().startsWith("ar")?"ar":navigator.language&&navigator.language.toLowerCase().startsWith("tr")?"tr":navigator.language&&navigator.language.toLowerCase().startsWith("bn")?"bn":"en",appVersion:"1.0.0",buildVersion:"1",appChannel:"Web",reqImei:"H5-STATIC",sysOrigin:"LIKEI",sysOriginChild:"LIKEI"}),console.groupEnd(),await r(),e&&e(),{success:!0,environment:"browser"};if(g())return console.debug("✅ APP already connected and valid"),h()&&console.debug("🔧 Using cached HTTP headers"),console.groupEnd(),await r(),e&&e(),{success:!0,environment:"app",fromCache:!0};if(n.isConnecting())return console.debug("⏳ Connection already in progress, waiting..."),await n.getConnectionPromise(),console.debug("✅ Connected via existing process"),console.groupEnd(),await r(),e&&e(),{success:!0,environment:"app",fromCache:!0};console.debug("📱 Establishing new APP connection...");const o=await new Promise((t,l)=>{const a=new Promise((d,i)=>{m(async p=>{try{const s=b(p);if(s.success){const u=P(s.data);console.debug("🔧 Setting HTTP headers..."),await w(u),n.setConnected(u),console.debug("🎉 APP connection established successfully"),d({success:!0,environment:"app",fromCache:!1})}else console.error("❌ Failed to parse access origin:",s.error),n.reset(),i(new Error(s.error))}catch(s){console.error("❌ Connection process failed:",s),n.reset(),i(s)}})});n.setConnecting(a),a.then(t).catch(l)});return console.debug("✅ Connection completed successfully"),console.groupEnd(),await r(),e&&e(),o}catch(o){return console.error("❌ Connection failed:",o),console.groupEnd(),c&&c(o),{success:!1,error:o.message}}};export{I as c};

View File

@ -0,0 +1 @@
const s="/assets/coin-lz3Tp0nX-1776148661447.png";export{s as _};

View File

@ -0,0 +1 @@
const e=r=>{console.log("头像资源出错"),r.target.onerror=null,r.target.src=new URL("/assets/defaultAvatar-CdxWBK1k-1776148661448.png",import.meta.url).href},t=(r,a)=>{console.log("图片资源出错"),r.target.onerror=null,a=="GOLD"?r.target.src=new URL("/assets/coin-lz3Tp0nX-1776148661447.png",import.meta.url).href:a=="DOLLARS"&&(r.target.src=new URL("/assets/dollar-fhua8OJo-1776148661448.png",import.meta.url).href)};export{t as a,e as h};

View File

@ -0,0 +1 @@
const e="/assets/yumi-ranking/",n=(t,s)=>`${e}${t}${s}.png`,a=(t,s)=>`${e}${t}${s}.webp`;export{a,n as g};

View File

@ -0,0 +1 @@
import{aC as a}from"./index-CIAVq8iD-1776148658686.js";const i=async r=>{let s=[];Array.isArray(r)?s=r:typeof r=="object"&&(s=Object.values(r));const t=[...new Set(s)].map(e=>a.isBuildAsset(e)?a.scheduleRequest(e):a.scheduleRequest(e));try{await Promise.all(t),console.log("图片预加载完成")}catch(e){throw console.error("预加载图片失败:",e),e}};export{i as p};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{_ as m,o as y,w as p,a as h,j as n,c as o,D as g,Q as v,b as _,a1 as b,n as w,S,r as d,an as k}from"./index-CIAVq8iD-1776148658686.js";const B=["src"],z={key:1,class:"placeholder",style:{width:"100%",height:"100%",backgroundColor:"transparent"}},I={__name:"itemCenter",props:{imgUrl:{type:String,default:"",required:!0},contentStyle:{type:String,default:""},rootMargin:{type:String,default:"100px"},flip:{type:Boolean,default:!1},lazy:{type:Boolean,default:!1},immediate:{type:Boolean,default:!1},show:{type:Boolean,default:!0}},setup(s){const e=s,i=d(null),l=d(!1);let t=null;const u=S(()=>e.immediate||!e.lazy?!0:l.value),c=()=>{!e.lazy||e.immediate||i.value&&(t&&t.disconnect(),t=new IntersectionObserver(a=>{a.forEach(r=>{r.isIntersecting&&(l.value=!0,t.unobserve(r.target))})},{rootMargin:e.rootMargin,threshold:0}),t.observe(i.value))};return y(()=>{c()}),p(()=>e.show,a=>{a&&e.lazy&&!e.immediate&&setTimeout(()=>{c()},100)}),h(()=>{t&&t.disconnect()}),(a,r)=>{const f=k("smart-img");return n(),o("div",{style:{position:"relative",width:"100%"},ref_key:"containerRef",ref:i},[u.value?g((n(),o("img",{key:0,src:s.imgUrl,class:v(s.flip?"flipImg":""),alt:"",style:{width:"100%",height:"100%",display:"block"}},null,10,B)),[[f]]):(n(),o("div",z)),_("div",{class:"scrollY",style:w([{position:"absolute",inset:"0",display:"flex","justify-content":"center","align-items":"center"},s.contentStyle])},[b(a.$slots,"default",{},void 0,!0)],4)],512)}}},C=m(I,[["__scopeId","data-v-5f334255"]]);export{C as i};

84
h5/privacy.html Normal file
View File

@ -0,0 +1,84 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Privacy Policy | Yumi</title>
<meta name="description" content="This Privacy Policy explains how Yumi and its operating entity collect, use, store, share, and protect information when users access the Yumi mobile application, websites, H5 pages, and related services.">
<link rel="canonical" href="https://h5.haiyihy.com/privacy.html">
</head>
<body>
<h1>Privacy Policy</h1>
<p>Effective date: 2026-04-13</p>
<p>Operator: Global Interactive Technology Co., Limited (環球互動科技有限公司)</p>
<p>Address: 中国香港环球大厦A01</p>
<p>Contact: postmaster@haiyinet.com.cn / +85256283162</p>
<p>This Privacy Policy explains how Yumi and its operating entity collect, use, store, share, and protect information when users access the Yumi mobile application, websites, H5 pages, and related services.</p>
<h2>1. Data Controller</h2>
<p>Yumi is operated by 環球互動科技有限公司 (Global Interactive Technology Co., Limited).</p><p>Registered address: 中国香港环球大厦A01.</p><p>For privacy questions, deletion requests, or complaints, contact: postmaster@haiyinet.com.cn or call +85256283162.</p>
<h2>2. Scope of This Policy</h2>
<p>This policy applies to the Yumi mobile application, the official website at www.haiyihy.com, H5 pages at h5.haiyihy.com, customer support interactions, and other related online services operated under the Yumi brand.</p>
<h2>3. Information We Collect</h2>
<p>Depending on how a user interacts with Yumi, we may collect the following categories of information:</p>
<p>- Account information, such as nickname, profile photo, login identifier, country or region, and account preferences.</p><p>- User-generated content, such as room names, room profile information, chat content, posts, reports, profile text, and uploaded media.</p><p>- Voice-room interaction data, including room participation, microphone state, room role, room settings, gift activity, and room engagement logs.</p><p>- Device and technical data, such as device model, operating system version, app version, network type, device identifiers, crash logs, and diagnostic data.</p><p>- Transaction and billing data related to in-app purchases, order status, recharge behavior, wallet history, and fraud-prevention checks.</p><p>- Support and risk data, such as user reports, abuse complaints, moderation decisions, and customer service records.</p><p>- Website usage data, including standard log data and limited browser information when users visit our public web pages.</p>
<h2>4. How We Use Information</h2>
<p>- Provide account registration, login, room participation, chat, and social features.</p><p>- Maintain platform integrity, trust, anti-abuse workflows, and fraud prevention.</p><p>- Process purchases, virtual items, recharge flows, and related financial support operations.</p><p>- Operate events, rankings, invitations, host programs, and agency-related H5 campaigns.</p><p>- Improve product performance through analytics, diagnostics, and crash resolution.</p><p>- Respond to support requests, complaints, legal notices, and data-rights requests.</p><p>- Comply with applicable laws, lawful requests, and platform obligations.</p>
<h2>5. Legal Bases</h2>
<p>Where applicable, we process personal information because it is necessary to provide requested services, to comply with legal obligations, to protect the platform and users, or based on legitimate business interests such as product operations, analytics, and service improvement.</p><p>When consent is required by law for a specific processing activity, we will rely on that consent.</p>
<h2>6. How Information May Be Shared</h2>
<p>We do not sell personal information. We may share information only as reasonably necessary in the following cases:</p>
<p>- With infrastructure, cloud, analytics, messaging, payment, customer-service, or fraud-prevention vendors that help us operate Yumi.</p><p>- With app-store or platform providers when required to support purchases, app review, crash handling, or policy compliance.</p><p>- With professional advisers, auditors, insurers, or legal representatives where reasonably necessary.</p><p>- When required by law, regulation, subpoena, court order, or lawful government request.</p><p>- As part of a corporate transaction such as a merger, restructuring, or asset transfer, subject to applicable safeguards.</p>
<h2>7. International Transfers</h2>
<p>Yumi may use systems, vendors, and support workflows that operate across different jurisdictions. Where personal information is transferred internationally, we take reasonable steps to apply appropriate contractual, technical, and organizational safeguards.</p>
<h2>8. Data Retention</h2>
<p>We retain personal information for as long as necessary to provide services, fulfill account functions, maintain business records, resolve disputes, prevent abuse, enforce agreements, or comply with legal obligations.</p><p>Retention periods may vary depending on the type of data, the sensitivity of the data, and the operational or legal reason for retaining it.</p>
<h2>9. Security</h2>
<p>We use reasonable administrative, technical, and organizational measures to protect information against unauthorized access, misuse, alteration, disclosure, or destruction. However, no method of transmission or storage can be guaranteed to be completely secure.</p>
<h2>10. Your Rights and Choices</h2>
<p>Subject to applicable law, users may request access, correction, deletion, restriction, objection, portability, or withdrawal of consent for certain data-processing activities.</p>
<p>- You may review and update some profile information directly inside the app.</p><p>- You may request account deletion or data deletion by contacting postmaster@haiyinet.com.cn.</p><p>- We may need to verify identity before responding to certain requests.</p>
<h2>11. Children&#39;s Privacy</h2>
<p>Yumi is not intended for children who are below the minimum age permitted under applicable law in the relevant market. If you believe a child has provided personal information to Yumi inappropriately, please contact postmaster@haiyinet.com.cn.</p>
<h2>12. Third-Party Services</h2>
<p>Yumi may integrate third-party services for login, messaging, analytics, purchases, or social sharing. Their data practices are governed by their own terms and privacy notices.</p>
<h2>13. Policy Updates</h2>
<p>We may update this Privacy Policy from time to time. The updated version will be posted on this page with a revised effective date.</p>
</body>
</html>

34
h5/ranking/index.html Normal file
View File

@ -0,0 +1,34 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"
>
<meta name="format-detection" content="telephone=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta name="description" content="Leaderboard H5 page for wealth, room, and charm rankings.">
<link rel="canonical" href="https://h5.haiyihy.com/ranking">
<title>Yumi Rankings</title>
<style>
body {
margin: 0;
padding: 0;
-webkit-text-size-adjust: 100%;
-webkit-overflow-scrolling: touch;
}
</style>
<script type="module" crossorigin src="/js/index-CIAVq8iD-1776148658686.js"></script>
<link rel="stylesheet" crossorigin href="/css/index-VRlNQ74k-1776148661679.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A dedicated landing page slot for charm campaigns, profile visibility pushes, and social leaderboard events. | Yumi H5</title>
<meta name="description" content="Use this page when the campaign angle is social presence, room influence, or creator energy rather than pure spend.">
<link rel="canonical" href="https://h5.haiyihy.com/rankings-charm/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="rose">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Rankings</div>
<h1 class="landing-title">A dedicated landing page slot for charm campaigns, profile visibility pushes, and social leaderboard events.</h1>
<p class="landing-lead">Use this page when the campaign angle is social presence, room influence, or creator energy rather than pure spend.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Social</strong> · campaign framing</div><div class="meta-chip"><strong>Brand-safe</strong> · copy-first leaderboard destination</div>
</div>
<div class="landing-banner">
<p>Helpful for event framing, rewards copy, and seasonal leaderboards.</p>
</div>
<div class="actions">
<a class="button" href="https://h5.haiyihy.com/rankings-wealth/">Open Wealth Rankings</a>
<a class="button-secondary" href="https://h5.haiyihy.com/rankings-rooms/">Open Room Rankings</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Use it for social momentum</h3>
<p>This page is a better pre-click story for charm or popularity campaigns than a raw in-app ranking screen.</p>
</section>
<section class="section-card">
<h3>Keep it current</h3>
<p>Page content is isolated from app releases so the campaign story can change without app-store friction.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A room-ranking campaign page for spotlighting active communities, top rooms, and themed room competitions. | Yumi H5</title>
<meta name="description" content="Useful when you want to explain what the room ranking means before sending users into the app experience.">
<link rel="canonical" href="https://h5.haiyihy.com/rankings-rooms/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="teal">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Rankings</div>
<h1 class="landing-title">A room-ranking campaign page for spotlighting active communities, top rooms, and themed room competitions.</h1>
<p class="landing-lead">Useful when you want to explain what the room ranking means before sending users into the app experience.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Community</strong> · room-based campaign focus</div><div class="meta-chip"><strong>High-intent</strong> · bridge from web to in-app room entry</div>
</div>
<div class="landing-banner">
<p>Purpose-built for room growth, discovery, and campaign traffic.</p>
</div>
<div class="actions">
<a class="button" href="https://h5.haiyihy.com/apply/">Apply as Host</a>
<a class="button-secondary" href="https://h5.haiyihy.com/games-king/">Open Games Campaign</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Campaign format</h3>
<p>Use this page to explain ranking time windows, participation criteria, or room activity themes.</p>
</section>
<section class="section-card">
<h3>Discovery surface</h3>
<p>It also works as a lightweight discovery page for room-focused users coming from ads, social posts, or direct links.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A public landing page for wealth-themed campaigns, visibility pushes, and leaderboard storytelling. | Yumi H5</title>
<meta name="description" content="Use this URL when you need a branded web destination for top-spender or premium-activity campaigns before routing users back into the app.">
<link rel="canonical" href="https://h5.haiyihy.com/rankings-wealth/">
<link rel="stylesheet" href="../assets/site.css">
</head>
<body data-theme="gold">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">H5 landing page</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">H5 Home</a><a href="https://www.haiyihy.com/">Official Site</a>
<a class="header-pill" href="https://h5.haiyihy.com/privacy.html">Privacy</a>
</nav>
</div>
</header>
<main class="shell landing-shell">
<div class="eyebrow">Rankings</div>
<h1 class="landing-title">A public landing page for wealth-themed campaigns, visibility pushes, and leaderboard storytelling.</h1>
<p class="landing-lead">Use this URL when you need a branded web destination for top-spender or premium-activity campaigns before routing users back into the app.</p>
<div class="landing-meta">
<div class="meta-chip"><strong>Public</strong> · campaign destination</div><div class="meta-chip"><strong>Flexible</strong> · can describe seasonal leaderboard logic</div>
</div>
<div class="landing-banner">
<p>A stable, linkable page for high-value campaign distribution.</p>
</div>
<div class="actions">
<a class="button" href="https://h5.haiyihy.com/rankings-charm/">Open Charm Rankings</a>
<a class="button-secondary" href="https://h5.haiyihy.com/rankings-rooms/">Open Room Rankings</a>
</div>
<div class="landing-stack">
<section class="section-card">
<h3>Why use a web page</h3>
<p>This lets operations explain campaign windows, prize rules, or ranking focus without requiring app copy updates.</p>
</section>
<section class="section-card">
<h3>How to adapt it</h3>
<p>Swap the title, hero summary, and CTA targets to match the next season or region.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

131
h5/terms.html Normal file
View File

@ -0,0 +1,131 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Terms of Service | Yumi</title>
<meta name="description" content="These Terms of Service govern access to and use of the Yumi app, website, H5 pages, and related services.">
<link rel="canonical" href="https://h5.haiyihy.com/terms.html">
<link rel="stylesheet" href="assets/site.css">
</head>
<body data-theme="ink">
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">Yumi</span>
<span class="brand__sub">Terms of Service</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
<a href="/">Home</a><a href="/privacy.html">Privacy</a><a href="/terms.html">Terms</a>
<a class="header-pill" href="https://www.haiyihy.com/">Official Site</a>
</nav>
</div>
</header>
<main class="shell legal-shell">
<div class="eyebrow">Service terms</div>
<h1 class="legal-title">Terms of Service</h1>
<p class="legal-summary">These Terms of Service govern access to and use of the Yumi app, website, H5 pages, and related services.</p>
<div class="legal-meta">
<div class="meta-chip">Effective date: 2026-04-13</div>
<div class="meta-chip">Global Interactive Technology Co., Limited</div>
<div class="meta-chip">postmaster@haiyinet.com.cn</div>
</div>
<div class="legal-stack">
<section class="section-card legal-block">
<h3>1. Acceptance of Terms</h3>
<p>By accessing or using Yumi, you agree to comply with these Terms of Service and all applicable laws.</p>
</section>
<section class="section-card legal-block">
<h3>2. Eligibility</h3>
<p>You must be legally permitted to use the service in your jurisdiction and satisfy the minimum age requirement applicable to your market.</p>
</section>
<section class="section-card legal-block">
<h3>3. Account Responsibilities</h3>
<ul><li>You are responsible for activity under your account.</li><li>You must provide accurate information where required.</li><li>You must not use Yumi for unlawful, abusive, fraudulent, or platform-disruptive behavior.</li></ul>
</section>
<section class="section-card legal-block">
<h3>4. User Content and Room Activity</h3>
<p>You retain responsibility for content you upload, publish, stream, or otherwise make available through Yumi, including room details, text, images, chat content, and other materials.</p><p>You must have the right to share the content you upload and the right to participate in or operate the room activity you initiate.</p>
</section>
<section class="section-card legal-block">
<h3>5. Purchases and Virtual Items</h3>
<p>Certain services may involve paid content, subscriptions, in-app purchases, or virtual items. Additional purchase terms may apply through the relevant app-store provider.</p><p>Except where required by law or expressly stated otherwise, virtual items and in-app balances are non-transferable and non-refundable.</p>
</section>
<section class="section-card legal-block">
<h3>6. Moderation and Enforcement</h3>
<p>We may suspend, restrict, remove, or terminate access to content, rooms, accounts, campaigns, or features where reasonably necessary to protect the platform, respond to abuse, or comply with legal or platform requirements.</p>
</section>
<section class="section-card legal-block">
<h3>7. Service Availability</h3>
<p>We may modify, suspend, or discontinue any part of Yumi at any time. We do not guarantee that the service will always be uninterrupted or error-free.</p>
</section>
<section class="section-card legal-block">
<h3>8. Intellectual Property</h3>
<p>All platform branding, software, design, trademarks, operational materials, and related content remain the property of Yumi or its licensors unless otherwise stated.</p>
</section>
<section class="section-card legal-block">
<h3>9. Disclaimer</h3>
<p>To the maximum extent allowed by law, Yumi is provided on an as-available basis without warranties of any kind, whether express or implied.</p>
</section>
<section class="section-card legal-block">
<h3>10. Contact</h3>
<p>For service questions or legal notices, contact postmaster@haiyinet.com.cn or call +85256283162.</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>Yumi is operated by Global Interactive Technology Co., Limited (環球互動科技有限公司).</p>
<p>中国香港环球大厦A01</p>
<p>Industry: Internet technology and information services</p>
<p>Support: <a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a><br>Phone: <a href="tel:+85256283162">+85256283162</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy policy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms of service</a>
<a href="https://h5.haiyihy.com/delete-account.html">Delete account</a>
<a href="https://h5.haiyihy.com/child-safety.html">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

View File

@ -1,9 +0,0 @@
{
"name": "haiyihy-public-site",
"private": true,
"type": "module",
"scripts": {
"build": "node ./scripts/build.mjs",
"new:landing": "node ./scripts/new-landing-page.mjs"
}
}

View File

@ -1,552 +0,0 @@
#!/usr/bin/env node
import fs from 'node:fs';
import path from 'node:path';
const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..');
const distDir = path.join(root, 'dist');
const wwwDir = path.join(distDir, 'www');
const h5Dir = path.join(distDir, 'h5');
const siteContent = readJson(path.join(root, 'content', 'site.json'));
const legalContent = readJson(path.join(root, 'content', 'legal.json'));
const H5_PRIVACY_URL = `${siteContent.company.h5Website}/privacy.html`;
const H5_TERMS_URL = `${siteContent.company.h5Website}/terms.html`;
const H5_DELETE_ACCOUNT_URL = `${siteContent.company.h5Website}/delete-account.html`;
const H5_CHILD_SAFETY_URL = `${siteContent.company.h5Website}/child-safety.html`;
const landingPages = fs
.readdirSync(path.join(root, 'content', 'landing-pages'))
.filter((file) => file.endsWith('.json'))
.map((file) => readJson(path.join(root, 'content', 'landing-pages', file)))
.sort((a, b) => a.slug.localeCompare(b.slug));
build();
function build() {
fs.rmSync(distDir, { force: true, recursive: true });
ensureDir(path.join(wwwDir, 'assets'));
ensureDir(path.join(h5Dir, 'assets'));
copyFile(path.join(root, 'src', 'site.css'), path.join(wwwDir, 'assets', 'site.css'));
copyFile(path.join(root, 'src', 'site.css'), path.join(h5Dir, 'assets', 'site.css'));
writeHtml(path.join(wwwDir, 'index.html'), renderHomePage());
writeHtml(
path.join(wwwDir, 'privacy', 'index.html'),
renderRedirectPage({
title: 'Privacy Policy Redirect',
target: H5_PRIVACY_URL,
}),
);
writeHtml(
path.join(wwwDir, 'terms', 'index.html'),
renderRedirectPage({
title: 'Terms of Service Redirect',
target: H5_TERMS_URL,
}),
);
writeHtml(
path.join(wwwDir, 'delete-account', 'index.html'),
renderRedirectPage({
title: 'Delete Account Redirect',
target: H5_DELETE_ACCOUNT_URL,
}),
);
writeHtml(
path.join(wwwDir, 'child-safety', 'index.html'),
renderRedirectPage({
title: 'Child Safety Standards Redirect',
target: H5_CHILD_SAFETY_URL,
}),
);
writeText(path.join(wwwDir, 'robots.txt'), 'User-agent: *\nAllow: /\n');
writeText(path.join(wwwDir, 'sitemap.xml'), renderSiteMap());
writeHtml(path.join(h5Dir, 'index.html'), renderLandingIndexPage());
writeHtml(
path.join(h5Dir, 'privacy.html'),
renderPlainLegalPage('privacy', {
canonical: H5_PRIVACY_URL,
}),
);
writeHtml(
path.join(h5Dir, 'terms.html'),
renderLegalPage('terms', {
canonical: H5_TERMS_URL,
homeHref: '/',
privacyHref: '/privacy.html',
termsHref: '/terms.html',
primaryActionHref: 'https://www.haiyihy.com/',
primaryActionLabel: 'Official Site',
}),
);
writeHtml(
path.join(h5Dir, 'delete-account.html'),
renderPlainLegalPage('deleteAccount', {
canonical: H5_DELETE_ACCOUNT_URL,
}),
);
writeHtml(
path.join(h5Dir, 'child-safety.html'),
renderPlainLegalPage('childSafety', {
canonical: H5_CHILD_SAFETY_URL,
}),
);
writeHtml(path.join(h5Dir, 'studio', 'index.html'), renderStudioPage());
writeText(path.join(h5Dir, 'data', 'pages.json'), `${JSON.stringify(landingPages, null, 2)}\n`);
for (const page of landingPages) {
writeHtml(path.join(h5Dir, page.slug, 'index.html'), renderLandingPage(page));
}
console.log(`Built public site to ${distDir}`);
}
function renderHomePage() {
const { brand, company, hero } = siteContent;
return renderDocument({
title: `${brand.name} | Official Website`,
description: brand.description,
canonical: `${company.website}/`,
hostRoot: '',
theme: 'ember',
bodyClass: 'corp-body',
body: `
<div class="corp-home">
<header class="corp-header">
<div class="shell corp-header__inner">
<a class="corp-brand" href="/">
<span class="corp-brand__mark" aria-hidden="true"></span>
<span class="corp-brand__text">
<strong>${escapeHtml(brand.name)}</strong>
<span>${escapeHtml(company.industry)}</span>
</span>
</a>
<nav class="corp-nav" aria-label="Primary">
<a href="#about">About Us</a>
<a href="${escapeAttr(H5_PRIVACY_URL)}">Privacy</a>
<a href="${escapeAttr(H5_TERMS_URL)}">Terms</a>
<a href="${escapeAttr(company.h5Website)}">H5 Pages</a>
<a href="#contact">Contact</a>
</nav>
</div>
</header>
<main class="corp-main">
<section class="corp-hero">
<div class="corp-hero__overlay"></div>
<div class="corp-hero__image"></div>
<div class="shell corp-hero__content">
<div class="corp-hero__eyebrow">${escapeHtml(hero.eyebrow)}</div>
<h1 class="corp-hero__title">${escapeHtml(hero.title)}</h1>
<p class="corp-hero__summary">${escapeHtml(hero.summary)}</p>
</div>
</section>
<section class="corp-strip" id="about">
<div class="shell corp-strip__grid">
<article class="corp-strip__item">
<small>About us</small>
<h2>${escapeHtml(company.legalNameEn)}</h2>
<p>${escapeHtml(company.legalNameCn)}</p>
<p>${escapeHtml(company.address)}</p>
</article>
<article class="corp-strip__item">
<small>Official pages</small>
<p><a href="${escapeAttr(H5_PRIVACY_URL)}">Privacy Policy</a></p>
<p><a href="${escapeAttr(H5_TERMS_URL)}">Terms of Service</a></p>
<p><a href="${escapeAttr(H5_DELETE_ACCOUNT_URL)}">Delete Account</a></p>
<p><a href="${escapeAttr(H5_CHILD_SAFETY_URL)}">Child Safety Standards</a></p>
<p><a href="${escapeAttr(company.h5Website)}">H5 Landing Pages</a></p>
</article>
<article class="corp-strip__item" id="contact">
<small>Contact</small>
<p><a href="mailto:${escapeAttr(company.supportEmail)}">${escapeHtml(company.supportEmail)}</a></p>
<p><a href="tel:${escapeAttr(company.phone)}">${escapeHtml(company.phone)}</a></p>
<p>${escapeHtml(company.website)}</p>
</article>
</div>
</section>
</main>
</div>
`,
});
}
function renderLegalPage(kind, options = {}) {
const { company, brand } = siteContent;
const doc = legalContent[kind];
const canonical = options.canonical || `${company.website}/${kind}/`;
const homeHref = options.homeHref || '/';
const privacyHref = options.privacyHref || H5_PRIVACY_URL;
const termsHref = options.termsHref || H5_TERMS_URL;
const primaryActionHref =
options.primaryActionHref || 'https://play.google.com/store/apps/details?id=com.org.yumi';
const primaryActionLabel = options.primaryActionLabel || 'Get Yumi';
return renderDocument({
title: `${doc.title} | ${brand.name}`,
description: doc.summary,
canonical,
hostRoot: '',
theme: kind === 'privacy' ? 'steel' : 'ink',
body: `
${renderHeader({
brandName: brand.name,
subline: doc.title,
links: [
{ href: homeHref, label: 'Home' },
{ href: privacyHref, label: 'Privacy' },
{ href: termsHref, label: 'Terms' },
],
action: { href: primaryActionHref, label: primaryActionLabel },
})}
<main class="shell legal-shell">
<div class="eyebrow">${escapeHtml(kind === 'privacy' ? 'Legal disclosure' : 'Service terms')}</div>
<h1 class="legal-title">${escapeHtml(doc.title)}</h1>
<p class="legal-summary">${escapeHtml(doc.summary)}</p>
<div class="legal-meta">
<div class="meta-chip">Effective date: ${escapeHtml(legalContent.effectiveDate)}</div>
<div class="meta-chip">${escapeHtml(company.legalNameEn)}</div>
<div class="meta-chip">${escapeHtml(company.privacyEmail)}</div>
</div>
<div class="legal-stack">
${doc.sections.map((section) => `
<section class="section-card legal-block">
<h3>${escapeHtml(section.title)}</h3>
${renderParagraphs(section.paragraphs)}
${renderBullets(section.bullets)}
</section>
`).join('')}
</div>
</main>
${renderFooter({ company, brandName: brand.name })}
`,
});
}
function renderPlainLegalPage(kind, options = {}) {
const { company, brand } = siteContent;
const doc = legalContent[kind];
const canonical = options.canonical || `${company.h5Website}/${kind}.html`;
return `<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>${escapeHtml(doc.title)} | ${escapeHtml(brand.name)}</title>
<meta name="description" content="${escapeAttr(doc.summary)}">
<link rel="canonical" href="${escapeAttr(canonical)}">
</head>
<body>
<h1>${escapeHtml(doc.title)}</h1>
<p>Effective date: ${escapeHtml(legalContent.effectiveDate)}</p>
<p>Operator: ${escapeHtml(company.legalNameEn)} (${escapeHtml(company.legalNameCn)})</p>
<p>Address: ${escapeHtml(company.address)}</p>
<p>Contact: ${escapeHtml(company.privacyEmail)} / ${escapeHtml(company.phone)}</p>
${kind === 'deleteAccount' ? `<p><a href="${escapeAttr(renderDeleteAccountMailto(company.privacyEmail))}">Start a deletion request by email</a></p>` : ''}
<p>${escapeHtml(doc.summary)}</p>
${doc.sections.map((section) => renderPlainLegalSection(section)).join('\n')}
</body>
</html>`;
}
function renderLandingIndexPage() {
const { brand, company } = siteContent;
return renderDocument({
title: `${brand.name} H5 | Campaign Pages`,
description: 'Index of JSON-driven Yumi landing pages.',
canonical: `${company.h5Website}/`,
hostRoot: '',
theme: 'sapphire',
body: `
${renderHeader({
brandName: brand.name,
subline: 'H5 landing pages',
links: [
{ href: '/', label: 'H5 Home' },
{ href: '/studio/', label: 'Studio' },
{ href: 'https://www.haiyihy.com/', label: 'Official Site' },
],
action: { href: H5_PRIVACY_URL, label: 'Privacy' },
})}
<main class="shell landing-shell">
<div class="eyebrow">Operations and campaigns</div>
<h1 class="landing-title">A structured index of all public H5 destinations.</h1>
<p class="landing-lead">Each page below is generated from a single JSON file, which keeps campaign updates lightweight and predictable.</p>
<div class="landing-grid" style="margin-top: 28px;">
${landingPages.map((page) => `
<a class="link-card" href="/${escapeAttr(page.slug)}/">
<small>${escapeHtml(page.eyebrow)}</small>
<h3>${escapeHtml(page.title)}</h3>
<p>${escapeHtml(page.summary)}</p>
<span>Open page</span>
</a>
`).join('')}
</div>
</main>
${renderFooter({ company, brandName: brand.name })}
`,
});
}
function renderLandingPage(page) {
const { brand, company } = siteContent;
return renderDocument({
title: `${page.title} | ${brand.name} H5`,
description: page.summary,
canonical: `${company.h5Website}/${page.slug}/`,
hostRoot: '../',
theme: page.theme || 'ember',
body: `
${renderHeader({
brandName: brand.name,
subline: 'H5 landing page',
links: [
{ href: '/', label: 'H5 Home' },
{ href: '/studio/', label: 'Studio' },
{ href: 'https://www.haiyihy.com/', label: 'Official Site' },
],
action: { href: H5_PRIVACY_URL, label: 'Privacy' },
})}
<main class="shell landing-shell">
<div class="eyebrow">${escapeHtml(page.eyebrow)}</div>
<h1 class="landing-title">${escapeHtml(page.title)}</h1>
<p class="landing-lead">${escapeHtml(page.summary)}</p>
<div class="landing-meta">
${page.stats.map((item) => `<div class="meta-chip"><strong>${escapeHtml(item.value)}</strong> · ${escapeHtml(item.label)}</div>`).join('')}
</div>
<div class="landing-banner">
<p>${escapeHtml(page.highlight)}</p>
</div>
<div class="actions">
<a class="button" href="${escapeAttr(page.cta.href)}">${escapeHtml(page.cta.label)}</a>
<a class="button-secondary" href="${escapeAttr(page.secondaryCta.href)}">${escapeHtml(page.secondaryCta.label)}</a>
</div>
<div class="landing-stack">
${page.sections.map((section) => `
<section class="section-card">
<h3>${escapeHtml(section.title)}</h3>
<p>${escapeHtml(section.body)}</p>
${renderBullets(section.bullets)}
</section>
`).join('')}
</div>
</main>
${renderFooter({ company, brandName: brand.name })}
`,
});
}
function renderStudioPage() {
const { brand, company } = siteContent;
return renderDocument({
title: `${brand.name} H5 Studio`,
description: 'Editorial cockpit for landing page content files.',
canonical: `${company.h5Website}/studio/`,
hostRoot: '../',
theme: 'forest',
body: `
${renderHeader({
brandName: brand.name,
subline: 'Content studio',
links: [
{ href: '/', label: 'H5 Home' },
{ href: 'https://www.haiyihy.com/', label: 'Official Site' },
{ href: H5_PRIVACY_URL, label: 'Privacy' },
],
action: { href: '/', label: 'View Pages' },
})}
<main class="shell studio-shell">
<div class="eyebrow">Editorial cockpit</div>
<h1 class="landing-title">Manage landing pages from JSON, not from page code.</h1>
<p class="landing-lead">This page is a publishing reference for operators and developers. It documents the current slugs and shows the exact JSON structure that drives each landing page.</p>
<div class="studio-note">
Current management mode is file-driven. Edit JSON under <code>public-site/content/landing-pages</code>, rebuild the site, and redeploy. This keeps operations fast while avoiding app-release coupling.
</div>
<div class="landing-stack">
${landingPages.map((page) => `
<section class="section-card">
<small>${escapeHtml(page.slug)}</small>
<h3>${escapeHtml(page.title)}</h3>
<p>${escapeHtml(page.summary)}</p>
<div class="actions">
<a class="button-secondary" href="/${escapeAttr(page.slug)}/">Preview page</a>
</div>
<pre class="code-block">${escapeHtml(JSON.stringify(page, null, 2))}</pre>
</section>
`).join('')}
</div>
</main>
${renderFooter({ company, brandName: brand.name })}
`,
});
}
function renderHeader({ brandName, subline, links, action }) {
return `
<header class="site-header">
<div class="shell site-header__inner">
<a class="brand" href="/">
<span class="brand__mark" aria-hidden="true"></span>
<span class="brand__text">
<span class="brand__name">${escapeHtml(brandName)}</span>
<span class="brand__sub">${escapeHtml(subline)}</span>
</span>
</a>
<nav class="header-links" aria-label="Primary">
${links.map((item) => `<a href="${escapeAttr(item.href)}">${escapeHtml(item.label)}</a>`).join('')}
<a class="header-pill" href="${escapeAttr(action.href)}">${escapeHtml(action.label)}</a>
</nav>
</div>
</header>
`;
}
function renderFooter({ company, brandName }) {
return `
<footer class="site-footer">
<div class="shell">
<div class="footer-grid">
<div>
<div class="eyebrow">Legal and support</div>
<p>${escapeHtml(brandName)} is operated by ${escapeHtml(company.legalNameEn)} (${escapeHtml(company.legalNameCn)}).</p>
<p>${escapeHtml(company.address)}</p>
<p>Industry: ${escapeHtml(company.industry)}</p>
<p>Support: <a href="mailto:${escapeAttr(company.supportEmail)}">${escapeHtml(company.supportEmail)}</a><br>Phone: <a href="tel:${escapeAttr(company.phone)}">${escapeHtml(company.phone)}</a></p>
</div>
<div>
<div class="footer-links">
<a href="https://www.haiyihy.com/">Official site</a>
<a href="${escapeAttr(H5_PRIVACY_URL)}">Privacy policy</a>
<a href="${escapeAttr(H5_TERMS_URL)}">Terms of service</a>
<a href="${escapeAttr(H5_DELETE_ACCOUNT_URL)}">Delete account</a>
<a href="${escapeAttr(H5_CHILD_SAFETY_URL)}">Child safety</a>
<a href="https://h5.haiyihy.com/">H5 index</a>
<a href="https://h5.haiyihy.com/studio/">H5 studio</a>
</div>
</div>
</div>
</div>
</footer>
`;
}
function renderDocument({ title, description, canonical, theme, hostRoot, body, bodyClass = '' }) {
return `<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>${escapeHtml(title)}</title>
<meta name="description" content="${escapeAttr(description)}">
<link rel="canonical" href="${escapeAttr(canonical)}">
<link rel="stylesheet" href="${escapeAttr(hostRoot)}assets/site.css">
</head>
<body data-theme="${escapeAttr(theme)}"${bodyClass ? ` class="${escapeAttr(bodyClass)}"` : ''}>
${body}
</body>
</html>
`;
}
function renderParagraphs(paragraphs = []) {
return paragraphs.map((paragraph) => `<p>${escapeHtml(paragraph)}</p>`).join('');
}
function renderBullets(bullets = []) {
if (!bullets?.length) {
return '';
}
return `<ul>${bullets.map((item) => `<li>${escapeHtml(item)}</li>`).join('')}</ul>`;
}
function renderPlainLegalSection(section) {
return `
<h2>${escapeHtml(section.title)}</h2>
${renderParagraphs(section.paragraphs)}
${renderPlainBullets(section.bullets)}
`;
}
function renderPlainBullets(bullets = []) {
if (!bullets?.length) {
return '';
}
return bullets.map((item) => `<p>- ${escapeHtml(item)}</p>`).join('');
}
function renderDeleteAccountMailto(email) {
const subject = encodeURIComponent('Delete Yumi Account');
return `mailto:${email}?subject=${subject}`;
}
function renderSiteMap() {
const pages = [
'https://www.haiyihy.com/',
'https://h5.haiyihy.com/',
H5_PRIVACY_URL,
H5_TERMS_URL,
H5_DELETE_ACCOUNT_URL,
H5_CHILD_SAFETY_URL,
'https://h5.haiyihy.com/studio/',
...landingPages.map((page) => `https://h5.haiyihy.com/${page.slug}/`),
];
return `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${pages.map((url) => ` <url><loc>${url}</loc></url>`).join('\n')}
</urlset>
`;
}
function renderRedirectPage({ title, target }) {
return `<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="refresh" content="0;url=${escapeAttr(target)}">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>${escapeHtml(title)}</title>
<link rel="canonical" href="${escapeAttr(target)}">
<script>window.location.replace(${JSON.stringify(target)});</script>
</head>
<body>
<p>Redirecting to <a href="${escapeAttr(target)}">${escapeHtml(target)}</a>...</p>
</body>
</html>
`;
}
function readJson(filePath) {
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
}
function ensureDir(dirPath) {
fs.mkdirSync(dirPath, { recursive: true });
}
function writeHtml(filePath, content) {
ensureDir(path.dirname(filePath));
fs.writeFileSync(filePath, `${content}\n`, 'utf8');
}
function writeText(filePath, content) {
ensureDir(path.dirname(filePath));
fs.writeFileSync(filePath, content, 'utf8');
}
function copyFile(source, target) {
ensureDir(path.dirname(target));
fs.copyFileSync(source, target);
}
function escapeHtml(value = '') {
return String(value)
.replaceAll('&', '&amp;')
.replaceAll('<', '&lt;')
.replaceAll('>', '&gt;')
.replaceAll('"', '&quot;')
.replaceAll("'", '&#39;');
}
function escapeAttr(value = '') {
return escapeHtml(value);
}

View File

@ -1,61 +0,0 @@
#!/usr/bin/env node
import fs from 'node:fs';
import path from 'node:path';
const slug = process.argv[2];
if (!slug) {
console.error('Usage: node ./scripts/new-landing-page.mjs <slug>');
process.exit(1);
}
if (!/^[a-z0-9-]+$/.test(slug)) {
console.error('Slug must use lowercase letters, numbers, and hyphens only.');
process.exit(1);
}
const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..');
const target = path.join(root, 'content', 'landing-pages', `${slug}.json`);
if (fs.existsSync(target)) {
console.error(`Landing page already exists: ${target}`);
process.exit(1);
}
const template = {
slug,
theme: 'ember',
eyebrow: 'Campaign',
title: 'Add your landing page headline here.',
summary: 'Summarize what this page is for and what action the visitor should take.',
highlight: 'One concise line that explains the page value.',
cta: {
label: 'Primary action',
href: 'https://www.haiyihy.com/',
},
secondaryCta: {
label: 'Secondary action',
href: 'https://h5.haiyihy.com/',
},
stats: [
{
value: 'Fast',
label: 'update-safe content model',
},
{
value: 'JSON',
label: 'driven page editing',
},
],
sections: [
{
title: 'Section title',
body: 'Describe the section content here.',
bullets: ['Optional bullet 1', 'Optional bullet 2'],
},
],
};
fs.writeFileSync(target, `${JSON.stringify(template, null, 2)}\n`, 'utf8');
console.log(`Created ${target}`);

757
www/assets/site.css Normal file
View File

@ -0,0 +1,757 @@
:root {
--bg: oklch(0.98 0.01 95);
--bg-soft: oklch(0.95 0.02 95);
--surface: rgba(255, 255, 255, 0.88);
--surface-strong: rgba(255, 255, 255, 0.96);
--line: rgba(83, 64, 40, 0.12);
--text: oklch(0.27 0.03 60);
--text-soft: oklch(0.49 0.03 60);
--accent: oklch(0.67 0.16 40);
--accent-soft: color-mix(in oklab, var(--accent) 14%, white);
--accent-strong: color-mix(in oklab, var(--accent) 80%, black);
--shadow: 0 28px 72px rgba(66, 43, 24, 0.12);
--radius-xl: 32px;
--radius-lg: 24px;
--radius-md: 18px;
--font-display: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", "Times New Roman", serif;
--font-body: "Avenir Next", "Segoe UI", "PingFang SC", "Helvetica Neue", sans-serif;
}
* {
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
margin: 0;
min-height: 100vh;
color: var(--text);
font-family: var(--font-body);
background:
radial-gradient(circle at top left, color-mix(in oklab, var(--accent) 12%, transparent) 0, transparent 34rem),
radial-gradient(circle at bottom right, color-mix(in oklab, var(--accent) 10%, transparent) 0, transparent 28rem),
linear-gradient(180deg, var(--bg) 0%, oklch(0.965 0.01 95) 100%);
}
body.corp-body {
background: #070c12;
color: #f3f6fb;
}
body[data-theme='sapphire'] { --accent: oklch(0.6 0.15 246); }
body[data-theme='forest'] { --accent: oklch(0.62 0.14 155); }
body[data-theme='ink'] { --accent: oklch(0.46 0.04 254); }
body[data-theme='gold'] { --accent: oklch(0.77 0.15 85); }
body[data-theme='steel'] { --accent: oklch(0.58 0.04 250); }
body[data-theme='violet'] { --accent: oklch(0.62 0.18 314); }
body[data-theme='berry'] { --accent: oklch(0.61 0.2 355); }
body[data-theme='rose'] { --accent: oklch(0.69 0.17 18); }
body[data-theme='teal'] { --accent: oklch(0.66 0.13 200); }
body[data-theme='mint'] { --accent: oklch(0.75 0.13 160); }
body[data-theme='ember'] { --accent: oklch(0.68 0.18 35); }
a {
color: inherit;
}
img {
max-width: 100%;
display: block;
}
.shell {
width: min(1180px, calc(100% - 32px));
margin: 0 auto;
}
.site-header {
position: sticky;
top: 0;
z-index: 10;
backdrop-filter: blur(18px);
background: rgba(250, 248, 243, 0.72);
border-bottom: 1px solid rgba(83, 64, 40, 0.08);
}
.site-header__inner {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
min-height: 74px;
}
.brand {
display: inline-flex;
align-items: center;
gap: 12px;
text-decoration: none;
}
.brand__mark {
width: 42px;
height: 42px;
border-radius: 14px;
background: linear-gradient(135deg, color-mix(in oklab, var(--accent) 74%, white) 0%, color-mix(in oklab, var(--accent) 48%, black) 100%);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.65), 0 12px 28px color-mix(in oklab, var(--accent) 26%, transparent);
}
.brand__text {
display: grid;
gap: 2px;
}
.brand__name {
font-family: var(--font-display);
font-size: 1.15rem;
font-weight: 700;
}
.brand__sub {
color: var(--text-soft);
font-size: 0.88rem;
}
.header-links {
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
}
.header-links a {
color: var(--text-soft);
text-decoration: none;
font-size: 0.94rem;
}
.header-pill {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 11px 15px;
border-radius: 999px;
background: color-mix(in oklab, var(--accent) 9%, white);
color: var(--accent-strong);
text-decoration: none;
font-weight: 600;
}
.hero {
padding: clamp(52px, 8vw, 92px) 0 48px;
}
.hero-grid {
display: grid;
grid-template-columns: 1.2fr 0.8fr;
gap: clamp(24px, 4vw, 48px);
align-items: start;
}
.eyebrow {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 10px 14px;
border-radius: 999px;
background: color-mix(in oklab, var(--accent) 9%, white);
color: var(--accent-strong);
font-size: 0.85rem;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.hero h1,
.section-title,
.legal-title,
.landing-title {
margin: 18px 0 0;
font-family: var(--font-display);
font-size: clamp(2.8rem, 6vw, 5.6rem);
line-height: 0.94;
letter-spacing: -0.03em;
}
.hero p.lead,
.landing-lead,
.legal-summary {
margin: 18px 0 0;
max-width: 62ch;
font-size: clamp(1.03rem, 1.5vw, 1.22rem);
line-height: 1.8;
color: var(--text-soft);
}
.actions {
display: flex;
flex-wrap: wrap;
gap: 14px;
margin-top: 30px;
}
.button,
.button-secondary {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 52px;
padding: 0 22px;
border-radius: 999px;
font-weight: 700;
text-decoration: none;
transition: transform 180ms ease, box-shadow 180ms ease, background 180ms ease;
}
.button {
background: linear-gradient(135deg, color-mix(in oklab, var(--accent) 85%, white), color-mix(in oklab, var(--accent) 50%, black));
color: white;
box-shadow: 0 18px 42px color-mix(in oklab, var(--accent) 22%, transparent);
}
.button-secondary {
background: rgba(255, 255, 255, 0.64);
color: var(--text);
border: 1px solid rgba(83, 64, 40, 0.1);
}
.button:hover,
.button-secondary:hover,
.header-pill:hover {
transform: translateY(-1px);
}
.glass-panel {
border-radius: var(--radius-xl);
padding: 26px;
background: linear-gradient(180deg, var(--surface-strong), var(--surface));
border: 1px solid rgba(83, 64, 40, 0.08);
box-shadow: var(--shadow);
}
.hero-card {
display: grid;
gap: 18px;
}
.metric-grid,
.card-grid,
.audience-grid,
.link-grid,
.landing-grid {
display: grid;
gap: 18px;
}
.metric-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
margin-top: 34px;
}
.metric {
padding: 18px 20px;
border-radius: var(--radius-md);
background: rgba(255, 255, 255, 0.55);
border: 1px solid rgba(83, 64, 40, 0.08);
}
.metric strong {
display: block;
font-size: 1.25rem;
font-family: var(--font-display);
}
.metric span {
display: block;
margin-top: 6px;
color: var(--text-soft);
line-height: 1.6;
font-size: 0.94rem;
}
.section {
padding: 34px 0 26px;
}
.section-head {
display: flex;
align-items: end;
justify-content: space-between;
gap: 18px;
margin-bottom: 22px;
}
.section-kicker {
margin: 0;
color: var(--text-soft);
line-height: 1.7;
max-width: 50ch;
}
.card-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.audience-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.landing-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.card,
.link-card,
.section-card {
border-radius: var(--radius-lg);
padding: 22px;
background: rgba(255, 255, 255, 0.66);
border: 1px solid rgba(83, 64, 40, 0.08);
box-shadow: 0 12px 32px rgba(89, 62, 33, 0.06);
}
.card small,
.section-card small {
display: inline-block;
color: var(--accent-strong);
letter-spacing: 0.08em;
text-transform: uppercase;
font-size: 0.78rem;
margin-bottom: 12px;
}
.card h3,
.link-card h3,
.section-card h3,
.faq-item h3 {
margin: 0;
font-size: 1.18rem;
}
.card p,
.link-card p,
.section-card p,
.faq-item p,
.site-footer p,
.legal-block p,
.legal-block li {
color: var(--text-soft);
line-height: 1.78;
}
.link-grid {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.link-card {
text-decoration: none;
}
.link-card span {
color: var(--accent-strong);
font-weight: 700;
}
.faq-grid {
display: grid;
gap: 14px;
}
.faq-item {
padding: 20px 22px;
border-radius: var(--radius-lg);
background: rgba(255, 255, 255, 0.62);
border: 1px solid rgba(83, 64, 40, 0.08);
}
.site-footer {
padding: 38px 0 70px;
}
.corp-home {
min-height: 100vh;
background: #05080d;
}
.corp-header {
position: absolute;
inset: 0 0 auto 0;
z-index: 20;
background: rgba(0, 0, 0, 0.9);
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.corp-header__inner {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
min-height: 78px;
}
.corp-brand {
display: inline-flex;
align-items: center;
gap: 14px;
color: #fff;
text-decoration: none;
}
.corp-brand__mark {
width: 40px;
height: 40px;
border-radius: 12px;
background:
linear-gradient(135deg, #1742ff 0 34%, transparent 34% 44%, #00b8ff 44% 68%, transparent 68% 78%, #ff9e2d 78% 100%);
box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08);
}
.corp-brand__text {
display: grid;
gap: 2px;
}
.corp-brand__text strong {
font-size: 1.18rem;
letter-spacing: 0.02em;
}
.corp-brand__text span {
color: rgba(255, 255, 255, 0.58);
font-size: 0.78rem;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.corp-nav {
display: flex;
align-items: center;
gap: clamp(14px, 2vw, 34px);
flex-wrap: wrap;
}
.corp-nav a {
color: rgba(255, 255, 255, 0.86);
text-decoration: none;
text-transform: uppercase;
letter-spacing: 0.08em;
font-size: 0.82rem;
}
.corp-main {
min-height: 100vh;
}
.corp-hero {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
overflow: hidden;
background:
linear-gradient(180deg, rgba(5, 8, 13, 0.18) 0%, rgba(5, 8, 13, 0.76) 100%),
linear-gradient(135deg, rgba(12, 18, 28, 0.88) 0%, rgba(3, 7, 14, 0.72) 100%);
}
.corp-hero__image,
.corp-hero__overlay {
position: absolute;
inset: 0;
}
.corp-hero__image {
background:
linear-gradient(180deg, rgba(4, 8, 14, 0.24), rgba(4, 8, 14, 0.58)),
radial-gradient(circle at 16% 22%, rgba(39, 83, 132, 0.3), transparent 24rem),
radial-gradient(circle at 82% 20%, rgba(32, 130, 182, 0.24), transparent 20rem),
url("https://images.unsplash.com/photo-1522202176988-66273c2fd55f?auto=format&fit=crop&w=1800&q=80") center / cover no-repeat;
transform: scale(1.02);
filter: saturate(0.78) brightness(0.72);
}
.corp-hero__overlay {
background:
linear-gradient(180deg, rgba(0, 0, 0, 0.14), rgba(0, 0, 0, 0.32)),
linear-gradient(90deg, rgba(7, 10, 15, 0.7), rgba(7, 10, 15, 0.18) 36%, rgba(7, 10, 15, 0.54));
}
.corp-hero__content {
position: relative;
z-index: 2;
display: grid;
place-items: center;
padding: 150px 0 110px;
text-align: center;
}
.corp-hero__eyebrow {
color: rgba(255, 255, 255, 0.75);
letter-spacing: 0.18em;
text-transform: uppercase;
font-size: 0.84rem;
}
.corp-hero__title {
margin: 18px 0 0;
max-width: 12ch;
color: #fff;
font-family: "SF Pro Display", "Avenir Next", "Helvetica Neue", sans-serif;
font-weight: 500;
font-size: clamp(3.8rem, 8vw, 6.9rem);
line-height: 1.14;
letter-spacing: -0.03em;
}
.corp-hero__summary {
margin: 26px 0 0;
max-width: 70ch;
color: rgba(255, 255, 255, 0.8);
font-size: clamp(1rem, 1.5vw, 1.14rem);
line-height: 1.9;
}
.corp-strip {
position: relative;
z-index: 3;
margin-top: -1px;
background: #06090f;
border-top: 1px solid rgba(255, 255, 255, 0.08);
}
.corp-strip__grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 0;
}
.corp-strip__item {
padding: 34px 28px 38px;
border-right: 1px solid rgba(255, 255, 255, 0.08);
}
.corp-strip__item:last-child {
border-right: none;
}
.corp-strip__item small {
display: inline-block;
margin-bottom: 14px;
color: rgba(255, 255, 255, 0.46);
letter-spacing: 0.12em;
text-transform: uppercase;
font-size: 0.76rem;
}
.corp-strip__item h2 {
margin: 0 0 14px;
color: #fff;
font-size: 1.26rem;
font-weight: 600;
line-height: 1.5;
}
.corp-strip__item p,
.corp-strip__item a {
margin: 0 0 10px;
color: rgba(255, 255, 255, 0.74);
text-decoration: none;
line-height: 1.8;
}
.footer-grid {
display: grid;
grid-template-columns: 1.1fr 0.9fr;
gap: 24px;
padding: 28px;
border-radius: var(--radius-xl);
background: linear-gradient(180deg, rgba(255, 255, 255, 0.82), rgba(255, 255, 255, 0.7));
border: 1px solid rgba(83, 64, 40, 0.08);
}
.footer-links {
display: flex;
flex-wrap: wrap;
gap: 12px 18px;
}
.footer-links a {
color: var(--text-soft);
text-decoration: none;
}
.legal-shell,
.landing-shell,
.studio-shell {
padding: clamp(38px, 7vw, 78px) 0 72px;
}
.legal-meta,
.landing-meta {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 20px;
}
.meta-chip {
padding: 10px 14px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.68);
border: 1px solid rgba(83, 64, 40, 0.08);
color: var(--text-soft);
}
.legal-stack,
.landing-stack {
display: grid;
gap: 18px;
margin-top: 30px;
}
.legal-block ul,
.section-card ul {
margin: 12px 0 0;
padding-left: 20px;
}
.legal-block li,
.section-card li {
margin: 8px 0;
}
.landing-banner {
margin-top: 28px;
padding: 24px;
border-radius: var(--radius-xl);
background:
linear-gradient(135deg, color-mix(in oklab, var(--accent) 14%, white), rgba(255, 255, 255, 0.72)),
radial-gradient(circle at top right, color-mix(in oklab, var(--accent) 30%, transparent), transparent 14rem);
border: 1px solid rgba(83, 64, 40, 0.08);
}
.landing-banner p {
margin: 0;
color: var(--accent-strong);
font-size: 1.02rem;
line-height: 1.72;
}
.studio-toolbar {
display: flex;
flex-wrap: wrap;
gap: 14px;
justify-content: space-between;
align-items: center;
margin-top: 24px;
}
.studio-note {
padding: 18px 20px;
border-radius: var(--radius-lg);
background: rgba(255, 255, 255, 0.68);
border: 1px solid rgba(83, 64, 40, 0.08);
color: var(--text-soft);
}
.code-block {
margin-top: 14px;
padding: 16px;
border-radius: 20px;
background: oklch(0.18 0.02 250);
color: oklch(0.95 0.01 250);
overflow: auto;
font-size: 0.88rem;
line-height: 1.6;
}
@media (max-width: 980px) {
.hero-grid,
.footer-grid,
.landing-grid,
.card-grid,
.audience-grid,
.link-grid {
grid-template-columns: 1fr;
}
.metric-grid {
grid-template-columns: 1fr;
}
.section-head {
align-items: start;
flex-direction: column;
}
.corp-header__inner,
.corp-strip__grid {
grid-template-columns: 1fr;
}
.corp-header__inner {
flex-direction: column;
align-items: start;
padding: 14px 0;
}
.corp-strip__item {
border-right: none;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.corp-strip__item:last-child {
border-bottom: none;
}
}
@media (max-width: 640px) {
.shell {
width: min(100% - 22px, 1180px);
}
.site-header__inner {
min-height: 66px;
}
.hero h1,
.section-title,
.legal-title,
.landing-title {
font-size: clamp(2.3rem, 12vw, 3.5rem);
}
.glass-panel,
.card,
.link-card,
.section-card,
.faq-item,
.footer-grid,
.landing-banner {
padding: 18px;
border-radius: 22px;
}
.corp-nav {
gap: 10px 16px;
}
.corp-nav a {
font-size: 0.74rem;
}
.corp-hero__content {
padding: 140px 0 84px;
}
.corp-hero__title {
max-width: 10ch;
font-size: clamp(2.9rem, 13vw, 4.6rem);
}
.corp-hero__summary {
max-width: 34ch;
line-height: 1.75;
}
}

View File

@ -0,0 +1,15 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="refresh" content="0;url=https://h5.haiyihy.com/child-safety.html">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Child Safety Standards Redirect</title>
<link rel="canonical" href="https://h5.haiyihy.com/child-safety.html">
<script>window.location.replace("https://h5.haiyihy.com/child-safety.html");</script>
</head>
<body>
<p>Redirecting to <a href="https://h5.haiyihy.com/child-safety.html">https://h5.haiyihy.com/child-safety.html</a>...</p>
</body>
</html>

View File

@ -0,0 +1,15 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="refresh" content="0;url=https://h5.haiyihy.com/delete-account.html">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Delete Account Redirect</title>
<link rel="canonical" href="https://h5.haiyihy.com/delete-account.html">
<script>window.location.replace("https://h5.haiyihy.com/delete-account.html");</script>
</head>
<body>
<p>Redirecting to <a href="https://h5.haiyihy.com/delete-account.html">https://h5.haiyihy.com/delete-account.html</a>...</p>
</body>
</html>

73
www/index.html Normal file
View File

@ -0,0 +1,73 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Yumi | Official Website</title>
<meta name="description" content="Yumi is a live social product operated within an internet technology and information service model, combining voice rooms, direct chat, campaign H5 funnels, and community interaction tools.">
<link rel="canonical" href="https://www.haiyihy.com/">
<link rel="stylesheet" href="assets/site.css">
</head>
<body data-theme="ember" class="corp-body">
<div class="corp-home">
<header class="corp-header">
<div class="shell corp-header__inner">
<a class="corp-brand" href="/">
<span class="corp-brand__mark" aria-hidden="true"></span>
<span class="corp-brand__text">
<strong>Yumi</strong>
<span>Internet technology and information services</span>
</span>
</a>
<nav class="corp-nav" aria-label="Primary">
<a href="#about">About Us</a>
<a href="https://h5.haiyihy.com/privacy.html">Privacy</a>
<a href="https://h5.haiyihy.com/terms.html">Terms</a>
<a href="https://h5.haiyihy.com">H5 Pages</a>
<a href="#contact">Contact</a>
</nav>
</div>
</header>
<main class="corp-main">
<section class="corp-hero">
<div class="corp-hero__overlay"></div>
<div class="corp-hero__image"></div>
<div class="shell corp-hero__content">
<div class="corp-hero__eyebrow">Internet technology and information services</div>
<h1 class="corp-hero__title">To Build Trusted Digital Interaction Worldwide</h1>
<p class="corp-hero__summary">Global Interactive Technology Co., Limited provides internet technology and information services for live social products, official web presence, and digital campaign delivery.</p>
</div>
</section>
<section class="corp-strip" id="about">
<div class="shell corp-strip__grid">
<article class="corp-strip__item">
<small>About us</small>
<h2>Global Interactive Technology Co., Limited</h2>
<p>環球互動科技有限公司</p>
<p>中国香港环球大厦A01</p>
</article>
<article class="corp-strip__item">
<small>Official pages</small>
<p><a href="https://h5.haiyihy.com/privacy.html">Privacy Policy</a></p>
<p><a href="https://h5.haiyihy.com/terms.html">Terms of Service</a></p>
<p><a href="https://h5.haiyihy.com/delete-account.html">Delete Account</a></p>
<p><a href="https://h5.haiyihy.com/child-safety.html">Child Safety Standards</a></p>
<p><a href="https://h5.haiyihy.com">H5 Landing Pages</a></p>
</article>
<article class="corp-strip__item" id="contact">
<small>Contact</small>
<p><a href="mailto:postmaster@haiyinet.com.cn">postmaster@haiyinet.com.cn</a></p>
<p><a href="tel:+85256283162">+85256283162</a></p>
<p>https://www.haiyihy.com</p>
</article>
</div>
</section>
</main>
</div>
</body>
</html>

15
www/privacy/index.html Normal file
View File

@ -0,0 +1,15 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="refresh" content="0;url=https://h5.haiyihy.com/privacy.html">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Privacy Policy Redirect</title>
<link rel="canonical" href="https://h5.haiyihy.com/privacy.html">
<script>window.location.replace("https://h5.haiyihy.com/privacy.html");</script>
</head>
<body>
<p>Redirecting to <a href="https://h5.haiyihy.com/privacy.html">https://h5.haiyihy.com/privacy.html</a>...</p>
</body>
</html>

2
www/robots.txt Normal file
View File

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

21
www/sitemap.xml Normal file
View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://www.haiyihy.com/</loc></url>
<url><loc>https://h5.haiyihy.com/</loc></url>
<url><loc>https://h5.haiyihy.com/privacy.html</loc></url>
<url><loc>https://h5.haiyihy.com/terms.html</loc></url>
<url><loc>https://h5.haiyihy.com/delete-account.html</loc></url>
<url><loc>https://h5.haiyihy.com/child-safety.html</loc></url>
<url><loc>https://h5.haiyihy.com/admin-center/</loc></url>
<url><loc>https://h5.haiyihy.com/agency-center/</loc></url>
<url><loc>https://h5.haiyihy.com/apply/</loc></url>
<url><loc>https://h5.haiyihy.com/bd-center/</loc></url>
<url><loc>https://h5.haiyihy.com/bd-leader-center/</loc></url>
<url><loc>https://h5.haiyihy.com/coin-seller/</loc></url>
<url><loc>https://h5.haiyihy.com/games-king/</loc></url>
<url><loc>https://h5.haiyihy.com/host-center/</loc></url>
<url><loc>https://h5.haiyihy.com/invite-new-user/</loc></url>
<url><loc>https://h5.haiyihy.com/rankings-charm/</loc></url>
<url><loc>https://h5.haiyihy.com/rankings-rooms/</loc></url>
<url><loc>https://h5.haiyihy.com/rankings-wealth/</loc></url>
</urlset>

15
www/terms/index.html Normal file
View File

@ -0,0 +1,15 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="refresh" content="0;url=https://h5.haiyihy.com/terms.html">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Terms of Service Redirect</title>
<link rel="canonical" href="https://h5.haiyihy.com/terms.html">
<script>window.location.replace("https://h5.haiyihy.com/terms.html");</script>
</head>
<body>
<p>Redirecting to <a href="https://h5.haiyihy.com/terms.html">https://h5.haiyihy.com/terms.html</a>...</p>
</body>
</html>