FlowerMoji is a static PWA for sending a digital flower card with a short message. It is designed around low-pressure gifting: recipients do not need to install an app, log in, or send a reply. The current production build integrates with LINE LIFF and can send a flower card as a LINE Flex Message when the channel is configured.
日本語: FlowerMoji は「花で気持ちを、そっと届ける」ためのデジタル贈花 PWAです。LINE連携ではFlex Messageカードとして花を送り、受け取り側は アプリ不要でブラウザだけで写真とメッセージを受け取れます。
- Repository visibility: currently private, intended for public OSS release.
- Production URL: https://flowermoji.netlify.app/
- LINE integration: LIFF based sharing with Web Share and LINE share URL fallback.
- Gift storage: Netlify Function and Netlify Blobs support short gift URLs.
- Analytics: optional Google Analytics configuration is generated into
analytics-env.js; it is disabled when no measurement ID is configured. - Package distribution: no npm/PyPI/crates package is published.
- License: MIT.
- Static web app that can be deployed from the repository root.
- PWA manifest and service worker.
- LINE Flex Message sharing through
shareTargetPickerwhen LIFF is available. - Browser fallback for environments without LIFF.
- Short gift URLs through
/.netlify/functions/gifts. - Privacy pages for production and LINE MINI App review.
- No read receipts, open notifications, reply reminders, or recipient tracking.
flowermoji-prod/
├── index.html
├── flowermoji-config.js
├── analytics-env.js
├── manifest.json
├── sw.js
├── netlify.toml
├── netlify/functions/gifts.js
├── privacy.html
├── terms.html
├── support.html
├── LINE_IMPLEMENTATION.md
├── LINE_MINI_APP_STEPS.md
├── LINE_RELEASE_PACKAGE.md
└── README.md
Install dependencies:
npm ciRun the build step:
npm run buildServe the static app:
npx serve .Open the local URL printed by serve. PWA and service worker behavior should be
checked over HTTP/HTTPS, not with file://.
Create a LINE LIFF app in LINE Developers and
set the values in flowermoji-config.js.
window.FLOWERMOJI_CONFIG = {
liffId: "2010080150-Tbv0aD5W",
canonicalUrl: "https://flowermoji.netlify.app/",
enablePremiumCheckout: false,
enableAnalyticsInLocal: false,
gaMeasurementId: ""
};canonicalUrl is used as the base URL for gift links sent through LINE. Use the
public HTTPS app URL, not a liff.line.me URL. Enable shareTargetPicker in the
LINE channel for LINE sending.
See LINE_IMPLEMENTATION.md and LINE_MINI_APP_STEPS.md for setup details.
The current production site is deployed to:
https://flowermoji.netlify.app/
Netlify settings:
- Build command:
npm run build - Publish directory: repository root
- Function directory:
netlify/functions
Netlify CLI example:
netlify deploy --prod --dir=.Run these before submitting changes:
npm ci
npm run build
npm audit
node -e "require('./netlify/functions/gifts.js'); console.log('gifts function loads')"Manual checks:
- Open the production or local app in a browser.
- Select a flower and create a gift.
- Confirm the received gift page shows the flower, addressee, message, and flower language.
- Confirm LINE sharing still opens the friend picker when tested inside LINE.
The latest production QA notes are in QA_STATUS.md.
- Do not commit API keys, LINE channel secrets, access tokens, cookies, or private account data.
- LIFF IDs and public Netlify URLs are not secrets, but maintainers should verify that they are safe to publish before making the repository public.
- Gift text is length limited and sanitized in
netlify/functions/gifts.js. - Gift records expire after 90 days in the current function implementation.
Security reporting guidance is in SECURITY.md.
Contribution guidance is in CONTRIBUTING.md. This repository is small, so changes should stay focused and avoid unrelated refactors.
See CHANGELOG.md.
FlowerMoji is released under the MIT License.