Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
AI Build Camp test
Translation pending
LifestyleJavaScript · PLpgSQLGitHub @Natekim81OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗오늘 현장 일정과 지역별 날씨를 한 화면에서 보고, 날씨 때문에 주의 · 중지를 검토할 일정을 표시합니다. (교육용 가상 데이터)
index.html 더블클릭으로 엽니다. CDN과 Supabase·날씨 API 접속을 위해 인터넷 연결이 필요합니다.| 파일 | 역할 |
|---|---|
| index.html | 화면 구조 |
| style.css | 디자인 |
| logic.js | 판단 규칙, 날씨 API 주소 생성·응답 해석, Markdown 생성 |
| app.js | 화면 동작, Supabase 일정 조회·추가, 날씨 API 호출 |
| config.js | 브라우저·서버 공용 Supabase 주소와 공개용 키 두 줄 |
| api/kma.js | Vercel에서 지역별 DB 일정·기상청 날씨·판단 JSON 조회 |
| tests/kma.test.js | 기상청 처리·서버 API·공용 설정 회귀 테스트 |
| setup.sql | DB 표·제약·권한·RLS·기본 가상 일정 6건 설정 |
| data/tasks.json | 이전 F-05 실습 자료 (현재 앱은 읽지 않음) |
| PRD.md | 무엇을 · 왜 만드는지 |
| CLAUDE.md | AI가 지킬 작업 규칙 |
| .gitignore | GitHub에 올리지 않을 파일 목록 |
Supabase 프로젝트의 SQL Editor에서 setup.sql 전체를 실행합니다. 앱은 SQL을 자동 실행하지 않습니다. public.wx_tasks가 없는 프로젝트에서 시작하는 설정이며, 이 스크립트로 만든 표에는 다시 실행해도 기본 일정이 중복되지 않습니다.
Supabase 프로젝트의 Connect 또는 Settings → API Keys에서 프로젝트 주소와 Publishable key를 확인합니다. 기존 anon key도 사용할 수 있습니다. 비밀 키인 Secret key / service_role key는 사용하지 마세요.
config.js의 두 줄에 직접 입력합니다. 이 파일은 브라우저에서 읽히며, 공개용 키는 RLS가 허용하는 조회·추가에만 사용됩니다.
(typeof module === 'undefined' ? globalThis : module.exports).SUPABASE_URL = 'https://YOUR_PROJECT.supabase.co';
(typeof module === 'undefined' ? globalThis : module.exports).SUPABASE_PUBLIC_KEY = 'sb_publishable_YOUR_PUBLIC_KEY';
페이지를 열어 기본 일정 6건을 확인합니다. 설정 변경을 배포 사이트에 반영하려면 변경한 config.js도 배포해야 합니다.
wx_tasks는 id, title, region, kind, owner, created_at 열을 가집니다. 목록은 id 오름차순으로 읽습니다.NOT NULL·CHECK가 빈 일정명·담당, 지역(세종·대전·태안·보령)과 구분(야외·고소·실내) 외의 값을 거부합니다.wx_added와 JSON 자료는 자동으로 이관하거나 삭제하지 않습니다.supabase-js 하나뿐입니다.Asia/Seoul) 기준 오늘 하루 예보를 요청합니다.temperature_2m_max), 최대 풍속(wind_speed_10m_max, wind_speed_unit=ms), 최대 강수확률(precipitation_probability_max)을 표시합니다.https://배포주소/api/kma?region=대전 (GET). 세종·대전·태안·보령만 지정할 수 있습니다.wx_tasks에서 해당 지역의 일정을 조회하고, 기상청 오늘 날씨와 일정별 judgment를 반환합니다. 일정이 없으면 tasks: []입니다.config.js에 넣지 않습니다.getVilageFcst입니다. 해당 서비스의 활용 승인이 필요합니다. 기상청 API허브에서 발급한 키는 이 호출에 사용할 수 없습니다. 발급처는 아직 확인되지 않아 공공데이터포털을 전제로 구현했습니다.forecast.baseDate·baseTime이 사용한 발표 시각입니다. 기온 TMP·최고기온 TMX, 풍속 WSD, 강수확률 POP로 일별 최댓값을 계산합니다. 바람은 m/s입니다. 필요한 24시간 값이 누락되면 날씨를 미수신으로 처리합니다.weather: null과 warning이 나오며 DB 일정은 남습니다. 실내는 ‘영향 없음’, 그 외는 ‘날씨 확인 전’입니다. DB 실패는 502, 설정 오류는 503이며 다른 자료로 대체하지 않습니다. 외부 요청에는 8초 제한을 둡니다.응답 구조 예시입니다. 숫자와 일정은 설명용 가상 값입니다.
{
"date": "2026-10-27",
"region": "대전",
"source": "기상청 단기예보 (공공데이터포털)",
"forecast": { "baseDate": "20261026", "baseTime": "2300", "timezone": "Asia/Seoul" },
"units": { "tempMax": "℃", "windMax": "m/s", "rainProb": "%" },
"weather": { "tempMax": 25, "windMax": 3, "rainProb": 20 },
"warning": null,
"tasks": [
{
"id": 1, "title": "가상 점검", "region": "대전", "kind": "야외", "owner": "가상담당",
"weather": { "tempMax": 25, "windMax": 3, "rainProb": 20 },
"judgment": { "level": "ok", "text": "진행" }
}
]
}
T-01: SQL 실행과 연결 설정 후 페이지를 열어 DB의 기본 일정 6건이 보이는지 확인합니다. DB에 추가한 일정이 있으면 함께 표시됩니다.
T-02: 가상 일정을 추가해 맨 아래에 보이고, Supabase Table Editor에도 저장되는지 확인합니다. 새로고침 후에도 남아야 합니다. 날씨 수신 후 추가한 일정에도 해당 지역의 날씨와 판단이 표시됩니다.
T-03: 인터넷에 연결한 상태로 열어 4개 지역의 최고 기온·최대 풍속(m/s)·강수확률과 판단을 확인합니다. 같은 지역 일정은 같은 날씨를 사용합니다. 실제 예보에 따라 지역 간 일부 값은 같을 수 있습니다.
T-04: 브라우저 주소 끝에 ?test=wind를 붙여 엽니다 (index.html?test=wind). 모든 지역의 풍속이 12 m/s로 표시되고 기본 고소 일정 2건이 ‘중지 검토’인지 확인합니다. 상단에 시험값 안내가 표시됩니다. API 실패 시에도 풍속만 시험값으로 표시하고, 기온·강수확률은 ‘미수신’으로 남깁니다. 시험을 끝내려면 쿼리 문자열을 제거합니다.
T-01·T-03 실패 상황: ?test=wind를 제거하고 개발자 도구에서 날씨 API 요청만 차단한 뒤 새로고침합니다. DB 일정 목록은 유지되고, 상단에 실패 지역이 표시되며 실외 일정은 ‘날씨 확인 전’, 실내 일정은 ‘영향 없음’인지 확인합니다.
T-05·T-06: 이전 JSON 로딩·파일 실패 안내 검사는 F-06에서 아래 T-08·T-09로 대체합니다.
T-07: ‘오늘 판단 md로 저장’을 눌러 현장일정_판단_YYYY-MM-DD.md가 내려받아지는지 확인합니다. 날짜는 한국 시간 기준입니다. 파일을 열어 현재 표의 6개 열과 추가 일정이 같은 순서로 들어 있고, 맨 아래 판단 기준에 풍속 10 m/s·강수확률 60%·기온 33℃가 있는지 확인합니다. 날씨 미수신 상태와 ?test=wind에서도 현재 표가 저장되며, 시험 모드에서는 시험값 안내가 포함됩니다. 일정 이름에 |, 줄바꿈, < 등이 있어도 Markdown 표가 유지되는지 확인합니다.
T-08: 브라우저 A에서 가상 일정을 추가하고 브라우저 B(또는 시크릿 창)에서 새로고침해 같은 일정이 보이는지 확인합니다. 이전 Local Storage가 목록에 섞이지 않아야 합니다.
T-09: 빈 연결 설정, CDN 차단, DB 조회 차단 시 각각 안내가 보이고 추가 버튼이 비활성화되는지 확인합니다. 목록을 받은 후 DB 저장 요청을 차단해 추가하면 기존 목록과 입력이 유지되고 저장 실패 안내가 보여야 합니다.
T-10: SQL Editor에서 아래 검증 SQL을 실행합니다. 각각 의도적으로 실패해야 하며, 실패한 문장은 한 번에 하나씩 실행합니다. 정상 기본 일정은 그대로 남습니다.
-- 지역·구분 CHECK 제약 (각 문장을 따로 실행)
insert into public.wx_tasks (title, region, kind, owner)
values ('가상 제약 검사', '서울', '야외', '가상담당');
insert into public.wx_tasks (title, region, kind, owner)
values ('가상 제약 검사', '세종', '기타', '가상담당');
T-11: SQL Editor에서 다음 블록을 실행하면 permission denied로 실패해야 합니다. 실패 후 rollback;을 실행해 테스트 트랜잭션을 끝냅니다. setup.sql 재실행 후 기본 일정이 중복되지 않는지도 확인합니다.
begin;
set local role anon;
delete from public.wx_tasks where false;
rollback;
T-12: 최신 배포의 /api/kma?region=대전을 열어 tasks가 DB의 대전 일정과 일치하는지 확인합니다. 다른 3개 지역도 확인합니다. weather 값과 judgment를 확인합니다.
T-13: ?region=서울, 지역 생략, ?region=대전®ion=세종은 400인지, POST는 405인지 확인합니다. DB 설정이 잘못되거나 DB 조회가 실패하면 성공한 빈 목록으로 위장하지 않고 503·502가 나와야 합니다.
T-14: 테스트 배포에서 KMA_KEY를 빼거나 날씨 호출이 실패하도록 설정하면 DB 일정과 weather: null, warning이 나오는지 확인합니다. 응답에 인증키가 없어야 합니다. 점검 후 환경변수를 복구하고 재배포합니다.
T-15: Node.js가 설치된 PC에서 node --test tests/kma.test.js를 실행합니다. 실제 외부 API·DB 변경 없이 한국 날짜·최댓값·예보 누락·규칙·서버 오류·공용 설정·화면 기능을 검증합니다.