Skip to content

Instantly share code, notes, and snippets.

@KandaProp
KandaProp / index.html
Last active November 29, 2025 07:36
liff_update
<!doctype html>
<html lang="th">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ลงทะเบียนผู้ใช้งาน</title>
<script src="https://static.line-scdn.net/liff/edge/2/sdk.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2"></script>
<style>
* {
@KandaProp
KandaProp / liff form
Last active November 28, 2025 10:09
LIFF Form
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>LIFF Profile Form</title>
<script src="https://static.line-scdn.net/liff/sdk/v2/liff.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
@KandaProp
KandaProp / index.ts
Last active November 29, 2025 07:42
index.ts
// line-webhook/index.ts
import { serve } from "https://deno.land/std@0.177.0/http/server.ts";
import crypto from "https://deno.land/std@0.177.0/node/crypto.ts";
import { createClient } from "https://esm.sh/@supabase/supabase-js@2";
// ====== Secrets ======
const CHANNEL_ACCESS_TOKEN = Deno.env.get("CHANNEL_ACCESS_TOKEN");
const CHANNEL_SECRET = Deno.env.get("CHANNEL_SECRET");
const TELEGRAM_TOKEN = Deno.env.get("TELEGRAM_TOKEN");
const TELEGRAM_CHAT_ID = Deno.env.get("TELEGRAM_CHAT_ID");
// Richmenu
<!doctype html>
<html lang="th">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Admin Dashboard - Profiles (Realtime)</title>
<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script src="https://cdn.jsdelivr.net/npm/xlsx/dist/xlsx.full.min.js"></script>