비즈니스 콘솔은 업종에서 출발합니다. 식당과 호텔과 의원과 상점은 같은 사업이 아니고, 그것들을 똑같이 취급하는 백오피스는 결국 로그인이 붙은 스프레드시트가 됩니다. 식당이 보는 타일과 숙소가 보는 타일은 다릅니다. 그다음에 업종과 상관없이 모든 사업이 필요로 하는 세 가지를 얹습니다. 무엇을 팔았는지, 누가 샀는지, 누가 일했는지.
대시보드는 타일 격자이고, 타일은 지금 무슨 일이 벌어지는지 압니다
콘솔은 차트가 아니라 타일 격자로 열립니다. 각 타일에는 사람의 손이 필요한 것을 세는 실시간 배지가 붙습니다. 진행 중 주문, 직원을 호출한 테이블, 대기 중 예약, 새 배달, 대기 중 시술 예약, 대기 중 휴가. 배지는 몇 초마다 갱신되고, 테이블이 직원 호출 버튼을 누르면 하위 메뉴에서 숫자가 조용히 올라가는 대신 대시보드 상단에 빨간 배너가 나타납니다.
대시보드와 리포트의 차이가 여기 있습니다. 리포트는 어제 무슨 일이 있었는지 알려줍니다. 실시간 배지가 붙은 타일 격자는 지금 아무도 손대지 않은 것이 무엇인지 알려줍니다. 카운터 뒤에 선 사람이 행동할 수 있는 것은 후자뿐입니다. 리포트도 있지만, 첫 화면이 아니라 별도의 목적지로 있습니다.
네 가지 업종, 네 벌의 타일
식당과 카페는 들어오는 주문을 확인하거나 거절하거나 다음 단계로 넘기는 주방 화면, 사진·분류·판매 여부·재고·옵션 그룹·뷔페 역할·주류 플래그·세트를 다루는 메뉴 관리, 예약, 배달 주문, 전체 결제가 들어간 테이블·QR 화면 — 라벨이 붙은 할인, 받은 금액과 거스름돈, 결제 수단, 그리고 생성되는 PromptPay QR — 그리고 영업시간과 라스트오더 여유, 서비스 방식, 뷔페, 배달, 분류, 업장·주류 프로필, 테이블 수, PromptPay id, 주문 제한을 다루는 가게 설정을 받습니다.
서비스업과 의원은 예약, 서비스, 패키지를 받고, 의원 변형은 인터페이스를 예약·환자·치료 코스로 바꿔 부릅니다. 리테일은 대면 POS, 온라인 주문 콘솔, 그리고 부족 재고 경고가 있는 상품 관리를 받습니다. 숙박은 체크인·체크아웃이 있는 객실 현황판, 시즌 요금 규칙을 포함한 객실 타입 관리, 예약 수신함, 그리고 세입자·보증금·수도전기 검침·납부 여부가 붙는 생성 청구서를 다루는 월세 임대를 받습니다.
주인이 실제로 던지는 네 가지 질문에 답하는 리포트
모든 업종이 같은 리포트 화면을 받습니다. 질문이 업종에 따라 달라지지 않기 때문입니다. 얼마를 벌었나, 주문은 몇 건인가, 객단가는 얼마인가, 사람들은 어떻게 냈나. 결제 비중은 현금·PromptPay·기타로 나뉩니다. 그 옆에 판매 상위 다섯 개와 7일 매출 막대 그래프가 놓이고, 오늘·7일·30일·전체 기간으로 범위를 잡습니다.
서류 작업도 콘솔이 다룹니다. 영수증은 나중에 다시 출력할 수 있고, 뒤늦게 요청하는 손님을 위해 공유용 영수증 문구를 만들 수 있습니다. 세금계산서는 발행할 수 없습니다. 태국 조세법전 86/13조가 발행을 부가세 등록 사업자로 한정하고 있고, 이 시스템은 아직 어느 가게의 등록도 기록하지 않으며, 우리는 계산원이 누르는 스위치로 남기는 대신 그 문을 통째로 닫기로 했습니다. 하나의 판매 원장이 리포트와 CRM을 함께 굴리므로 매출 그래프와 고객 카드의 구매 이력은 같은 행을 읽습니다. 따로 어긋날 두 번째 집계 테이블이 없습니다.
양식이 아니라 원장에서 만들어지는 CRM
고객 명단은 직원이 입력하는 것이 아닙니다. 판매 원장에서 조립되므로, 고객이 CRM에 존재하는 이유는 무언가를 샀기 때문이지 누가 추가하는 것을 기억했기 때문이 아닙니다. 각 고객은 가게가 쓴 메모와 태그, 그리고 구매 이력을 갖습니다.
그 위에 적립이 놓입니다. 포인트는 가게가 자체 화폐 기준으로 정한 비율로 쌓이고, 최소 결제액과 전체 끄기 스위치도 선택적으로 정할 수 있습니다. 가게가 보상 비용과 그것이 무엇인지 정하고 같은 카드에서 사용 처리합니다.
HR: GPS 출퇴근, 8시간 초과 근무, 그리고 부분적으로만 보이는 급여
직원 관리는 모든 업종이 받습니다. 팀원은 GPS 위치와 선택적 메모가 붙은 상태로 출퇴근을 찍고, 그 덕분에 여러 지점을 오가는 기록이 양심에 맡기는 대신 확인 가능한 것이 됩니다. 휴가 신청은 콘솔에서 승인되거나 반려되고, 대기 중인 건은 대시보드 타일에 배지로 올라옵니다.
근무표와 급여는 출퇴근 기록에서 근무 분을 계산하고 하루 8시간을 넘는 초과근무를 세며, 시급이나 월급을 적용해 사람별 급여를 만듭니다. 가시성은 의도적으로 비대칭입니다. 일반 멤버는 자기 급여만 보고 소유자와 매니저는 전원을 봅니다. 그 옆에 팀 공지, 배정 가능한 업무, 팀 목록이 놓입니다.
역할, 그리고 검사가 어디서 도는지에 대한 솔직한 메모
권한은 13개의 핵심 권한에 설치된 모듈이 더하는 것으로 구성됩니다. 다섯 개의 역할 프리셋이 함께 옵니다. 와일드카드인 소유자, 그리고 매니저·홀·주방·직원. 그 위에 멤버별 예외를 줄 수 있습니다. 권한이 없는 타일은 흐리게 표시되고 거절되는 대신 아예 보이지 않고, 아무 권한도 없는 멤버는 고장처럼 보이는 빈 화면 대신 「아직 권한이 없습니다」라는 명시적인 상태를 받습니다.
같은 권한 행렬이 데이터베이스에도 has_capability(business_id, capability)로 존재하며, 서버에서 역할 프리셋을 펼치고 행 수준 보안 정책이 그것을 씁니다. 다만 우리가 주장하지 않는 것은 오늘 콘솔 전체가 서버에서 강제된다는 말입니다. 앱에서 타일 단위 검사는 클라이언트에서 돕니다. 데이터베이스 함수는 실재하고 쓰이고 있지만, 콘솔의 모든 화면을 그 뒤로 옮기는 일은 끝나지 않았습니다. 정책이 어떻게 쓰여 있는지는 보안 페이지에 있습니다.
의지하기 전에 알아야 할 두 가지. 앱 콘솔의 권한 검사는 클라이언트에서 돕니다. 짝이 되는 has_capability() 함수가 데이터베이스에 있고 행 수준 보안 정책을 받치고 있지만, 오늘 콘솔을 완전히 서버에서 강제된 것으로 읽지는 마십시오.
그리고 데이터베이스는 자동 백업이 없는 무료 플랜에서 돌고 있으며, 유휴 상태가 되면 일시 중지됩니다. 여기서 사업을 굴리는 데 실제로 걸리는 제약이고, 바쁜 영업 중에 알게 되는 것보다 지금 아시는 편이 낫습니다.
하나의 사업, 하나의 페이지, 하나의 수신함
콘솔은 가게의 공개 정체성도 갖고 있습니다. 로고와 커버와 갤러리를 다루는 페이지 관리, 내가 아니라 가게로 Korat 피드에 글을 올리는 기능, 고객 수신함, 공개 페이지 미리보기. 그리고 가게별로 애드온을 설치하는 플러그인 스토어도 여기 있습니다. 하나의 사업은 하나의 대시보드를 가진 하나의 객체입니다. 매장, 계산대, 직원, 고객 명단이 네 개의 제품을 꿰매 붙인 것이 아닙니다.
- 업종
- 음식 · 숙박 · 서비스와 의원 · 리테일
- 대시보드
- 타일 격자, 몇 초마다 갱신되는 실시간 배지, 테이블 호출 시 빨간 배너
- 리포트
- 매출, 주문 수, 객단가, 현금/PromptPay/기타 비중, 상위 5개, 7일 그래프
- 기간
- 오늘 · 7일 · 30일 · 전체
- 적립
- 가게가 정하는 포인트 적립 비율, 직접 정하는 최소 결제액과 보상
- HR
- 메모가 붙는 GPS 출퇴근, 휴가 승인, 하루 8시간 초과근무, 시급 또는 월급
- 권한
- 13개 핵심 권한 + 모듈 권한, 5개 역할 프리셋, 사람별 예외
어떤 모듈이 내 뒷단에 놓이는지는 모듈과 플러그인에서 직접 고릅니다. 회사가 직원에게 발급하는 디지털 명함도 여기서 관리합니다.
같은 출퇴근·근무표·급여 데이터를 직원 자신의 쪽에서 본 것이 내 직장입니다. 티켓을 파는 행사의 주최자 쪽은 이벤트와 티켓에 있습니다.