MeDo

AI 얼럿 생성기.

메시지를 설명하면 MeDo가 인라인 얼럿 전체 세트를 생성합니다 — 정보, 성공, 경고, 오류 변형에 강조 바, 아이콘, 제목, 설명, 선택적 액션 링크, 그리고 얼럿이 영구적이지 않을 때의 닫기 컨트롤까지.

얼럿
얼럿

심각도는 색상 없이도 전달돼야 합니다

얼럿은 어떤 일이 얼마나 심각한지를 전달하는 것 자체가 존재 이유인 유일한 컴포넌트인데, 색상은 그 일을 하기에 가장 신뢰할 수 없는 채널입니다. 남성 약 12명 중 1명이 어떤 형태의 색각 이상을 가지고 있고, 빨강과 초록은 가장 자주 혼동되는 조합이며, 같은 얼럿이라도 다크 테마나 밝기가 낮은 노트북, 흑백 인쇄에서는 구분이 완전히 사라집니다. 실질적인 결론은 얼럿에 설계 단계부터 중복 인코딩이 필요하다는 것입니다: 심각도별로 구분되는 아이콘 형태, 그리고 독자가 색조로 추론하기를 기대하지 않고 상황을 명시하는 문구. 네 가지 심각도를 하나의 설명에서 함께 생성하는 것이 아이콘 세트를 진짜로 구별 가능하게 유지하는 방법입니다. 하나씩이 아니라 서로 대비하며 선택되기 때문입니다.

템플릿 6개

생성할 수 있는 얼럿 템플릿

모든 템플릿은 스크린샷이 아니라 실제 프롬프트입니다. 어떤 AI 에디터에든 붙여넣거나 MeDo에서 실행해 React + Tailwind 코드를 그대로 받으세요.

BasicFour Severities

Accent-Bar Alert in Four Tones

The baseline set. Generating all four together is what keeps the icon shapes distinguishable from each other rather than four recolors of one glyph.

Create an inline alert component with four severities — info in blue with a circle icon, success in green with a check, warning in amber with a triangle, error in red with an octagon. Each is full width within its container with a 4px left accent bar in the severity color, a background tinted to roughly 8% of that color, 16px padding, an 8px radius, and a 20px icon aligned to the first text line rather than vertically centered. Render a semibold 15px title with an optional 14px muted description below. Because the alert renders with the page rather than appearing dynamically, use role="region" with an aria-label naming the severity, not role="alert" — an assertive live region on initial paint talks over everything else. Check every tinted background against its text color for 4.5:1 contrast.

MeDo에서 시도하기
ClosableDismissible

Alert With an Opt-In Close Button

Dismissal has to be per-instance, not global. A close button on an expired-payment alert lets the user hide a problem that still exists, and they will.

Add an opt-in dismiss control to an inline alert: a 32px icon button on the right with aria-label="Dismiss" and a visible focus ring, rendered only when a dismissible prop is passed so permanent alerts cannot be closed by accident. On dismiss, remove the alert from the DOM and move focus to the next focusable element after it rather than leaving focus on a detached node. Animate the collapse with height and opacity over 150ms, and skip the animation entirely under prefers-reduced-motion. Accept an onDismiss callback so the caller can persist the dismissal, and document that the alert should reappear on the next session while the underlying condition is unresolved.

MeDo에서 시도하기
With actionActionable

Alert Carrying One Next Step

An alert that names a problem without a route out of it just relocates the work. One action, concretely worded — two actions and neither reads as the primary.

Create an alert variant with a single inline action below the description, rendered in the severity color as a text link with an underline on hover and focus. Keep it to exactly one action so the next step is unambiguous, and require concrete wording in the label — "Update payment method", not "Learn more". If the action navigates, use an anchor; if it mutates state, use a button, and show an inline pending state on the button rather than replacing the alert while the request is in flight. Place the action inside the alert region so its purpose is announced together with the message, and keep its hit area at least 44px tall on touch.

MeDo에서 시도하기
CompactField Error

Single-Line Error Under an Input

No title, no icon block, no accent bar — just the message wired to the input it belongs to. The full alert anatomy next to a text field is visual noise that pushes the form apart.

Create a compact single-line alert for form-field errors: 13px text in the error color with a 14px inline icon, no title, no accent bar and no background tint, sitting 6px below its input with no vertical margin collapse. Give it a stable ID and reference it from the input with aria-describedby, and set aria-invalid="true" on the input at the same time. Because the message appears in response to a submit attempt, wrap it in role="alert" so it is announced immediately — but render the element only when there is an error rather than keeping an empty live region in the DOM, or the first error will be announced as a change to existing content. Reserve the line height so the layout does not jump when the message appears.

MeDo에서 시도하기
GlobalPage Banner

Full-Width Banner Above the App Shell

Trial countdowns, maintenance windows, degraded service. It sits above the layout rather than inside a page, so the thing that breaks is sticky-header offset math, not the alert itself.

Create a full-width alert banner that mounts above the application shell: edge-to-edge tinted background, centered content capped at the app container width, a 16px icon, one line of text and a single inline action, at 44px total height. Because it displaces the layout, expose its height as a CSS custom property on the root element so a sticky header can offset itself instead of being covered. Support a dismissible mode that persists to localStorage keyed by banner ID and version, so editing the message re-shows it to users who dismissed the previous one. Use role="region" with an aria-label rather than role="alert", since the banner is present on load and should not interrupt.

MeDo에서 시도하기
ValidationError Summary

Alert Listing Every Failed Field

The summary above the submit button, with one link per failure jumping to its input. It tells the user how many problems exist — the field-level messages tell them what to fix.

Create a validation summary alert for the top of a form: an error-severity block with a title stating the count — "3 fields need attention" — and an unordered list of links, each labelled with the field name plus the specific problem, each jumping to and focusing its input on click. Render it only after a submit attempt fails, give it role="alert" and move keyboard focus to the alert container itself with tabindex="-1" so a screen reader user lands on the summary rather than hunting for it. Rebuild the list on every failed submit and re-announce even when the set of errors is unchanged. Pair it with per-field messages wired through aria-describedby rather than replacing them.

MeDo에서 시도하기

얼럿 커스터마이즈 방법

각 색상에 구분되는 아이콘 형태를 짝지으세요

심각도마다 구체적인 아이콘을 요청하세요 — 성공에는 체크, 경고에는 삼각형, 오류에는 팔각형, 정보에는 원형. 형태는 흑백에서도 색약 사용자에게도 읽히고, 한 글자도 읽기 전에 주변시로 심각도를 파악할 수 있게 합니다.

얼럿을 닫을 수 있게 할지 미리 결정하세요

만료된 결제 수단처럼 해결되지 않은 상태를 설명하는 얼럿에 닫기 버튼을 두면, 사용자가 여전히 존재하는 문제를 숨길 수 있게 됩니다. 닫기는 인스턴스 단위 옵트인으로 두고, 근본 상태가 바뀔 때만 사라져야 하는 메시지는 영구 얼럿으로 유지하세요.

페이지 수준 배너와 필드 수준 오류를 분리하세요

페이지 수준 얼럿은 요약이며 폼 상단에 위치하고, 필드 수준 오류는 해당 입력 바로 아래에 놓여 aria-describedby로 참조됩니다. 필드용으로는 콤팩트한 한 줄 변형을 요청해, 텍스트 입력 옆에 제목과 아이콘 블록을 끌고 다니지 않도록 하세요.

얼럿 안에 다음 행동을 적으세요

문제를 설명하면서 벗어날 길을 주지 않는 얼럿은 일을 옮겨놓기만 합니다. "결제 수단 업데이트"처럼 구체적인 문구의 인라인 액션 링크를 하나만 지정하고, 다음 단계가 분명하게 유지되도록 액션은 하나로 제한하세요.

얼럿 컴포넌트를 사용하는 사람

SaaS 제품

체험 기간이 3일 남았을 때 앱 상단 전체에 "업그레이드" 액션 링크가 붙은 영구 경고 배너를 띄우고, 설정 페이지 안에서는 저장된 구성을 확인하는 성공 얼럿을 표시합니다.

이커머스 스토어

장바구니 페이지에는 배송 마감 시간을 알리는 정보 얼럿을, 결제 폼 위에는 결제 거절 상세를 요약한 오류 얼럿을 배치해 페이지가 다시 렌더링돼도 메시지가 남게 합니다.

대시보드 또는 관리 도구

데이터 가져오기 화면에서는 어떤 행이 검증에 실패했는지 나열하는 오류 얼럿을, 예정된 점검 시간에 대해서는 해당 시간이 지날 때까지 계속 보이는 정보 얼럿을 사용합니다.

문서 사이트

지원 중단된 API는 경고로, 버전별 동작은 정보로 표시하는 인라인 콜아웃 얼럿을, 떠 있는 알림으로는 소용이 없는 본문 흐름 안에 배치합니다.

웹사이트 유형별 얼럿 패턴

같은 얼럿 컴포넌트를 게시되는 사이트 유형에 맞춰 조정합니다.

01 / 06

SaaS Product Alerts

Trial countdowns and plan limits as permanent banners above the app shell, success alerts inside settings pages after a save. The banner is the tricky one: expose its height as a custom property or your sticky header will sit under it on every route.

얼럿 스타일과 변형

페이지의 나머지 부분과 어울리는 변형을 골라 바로 생성하세요.

01 / 06

Left Accent Bar Alert

A 4px bar in the severity color with a tinted fill. The bar gives the eye a vertical edge to scan a stack of alerts against, which matters when three appear together on a settings page — four flat tinted boxes are much harder to separate.

React, Next.js, Vue, Svelte에서의 얼럿

React, Next.js, Vue 3, SvelteKit, Astro 또는 순수 HTML — 같은 얼럿을 여섯 가지 방식으로 넣을 수 있습니다.

01 / 06

React Alert

A static alert needs no state at all — keep the severity map outside the component so tones and icons stay in one place. Only the dismissible variant needs a hook, so split it out rather than making every alert stateful.

src/components/Alert.tsx

const tones = {
  info: { bar: 'bg-blue-500', bg: 'bg-blue-50', Icon: InfoIcon },
  error: { bar: 'bg-red-500', bg: 'bg-red-50', Icon: OctagonIcon },
}

export function Alert({ severity = 'info', title, children }) {
  const { bar, bg, Icon } = tones[severity]
  return (
    <div role="region" aria-label={severity} className={`flex gap-3 ${bg}`}>
      <span className={`w-1 ${bar}`} />
      <Icon className="mt-0.5 h-5 w-5" />
      <div>
        <p className="font-semibold">{title}</p>
        {children}
      </div>
    </div>
  )
}

얼럿을 프로젝트에 추가하는 방법

얼럿 템플릿을 고르고 프로덕션에 배포하기까지 네 단계.

01~30s

Pick an Alert Pattern

Choose by where the message lives: the four-severity block for in-page state, the compact variant for a field error, the summary for a failed submit, the banner for something app-wide.

02~10s

Copy the Prompt

Take it into MeDo, Lovable, Bolt, v0 or Cursor. Decide whether this alert is dismissible before you run it — that choice determines whether a user can hide an unresolved problem.

03~1min

Generate and Refine

You get all four severities back with a live preview. Follow up in plain English — "add an Update payment method link", "make the error variant outlined", "drop the title on the compact one" — rather than recoloring tints by hand.

04~2min

Place It and Check the Roles

Put page-level alerts above the submit area and field errors under their inputs with aria-describedby. Then confirm the load-time alerts are not using role="alert", or a screen reader will announce them over the rest of the page.

얼럿에 대한 자주 묻는 질문

AI로 얼럿 컴포넌트를 생성하는 방법은?

심각도, 구성 요소, 닫을 수 있는지 여부를 설명하세요 — 예를 들어 "왼쪽 강조 바, 아이콘, 제목, 설명, 선택적 액션 링크를 갖춘 정보, 성공, 경고, 오류 얼럿" — 그러면 MeDo가 그 하나의 설명으로 네 가지 변형을 모두 생성합니다. 함께 생성되기 때문에 패딩, 반경, 아이콘 크기가 심각도 간에 일치합니다.

얼럿과 토스트의 차이는 무엇인가요?

인라인 얼럿은 페이지 레이아웃 안에 존재하며 설명하는 조건이 바뀔 때까지 유지되므로, 결제 문제, 점검 공지, 폼 오류처럼 사용자가 다시 읽어야 할 수 있는 상태에 적합합니다. 토스트는 페이지 위에 떠서 몇 초 후 사라지는 일시적 알림이므로, 사용자가 방금 수행한 동작을 확인해 주는 데 적합합니다. 스크롤이나 새로고침 후에도 메시지가 남아 있어야 한다면 얼럿을 쓰세요.

얼럿은 닫을 수 있어야 하나요?

메시지가 정보 전달용이고 놓쳐도 손실이 없을 때만 그렇습니다. 얼럿이 해결되지 않은 문제를 설명한다면 영구로 유지하고 상태가 해결될 때 스스로 사라지게 하세요. 그러지 않으면 닫기가 아직 주의가 필요한 문제를 감춥니다. 흔한 타협안은 닫을 수는 있지만 해결될 때까지 다음 세션에서 다시 나타나게 하는 방식입니다.

얼럿이 색상 없이 심각도를 전달할 수 있나요?

반드시 그래야 합니다. 각 심각도에 구분되는 아이콘 형태와 상황을 직접 지칭하는 문구를 짝지으면, 흑백 화면이나 색약 독자도 메시지를 받습니다. 프롬프트에서 MeDo에 아이콘과 텍스트를 함께 쓰는 인코딩을 요청하면, 하나의 아이콘을 네 번 다시 칠하는 대신 심각도마다 다른 글리프를 배정합니다.

폼 오류 얼럿은 어디에 두어야 하나요?

요약 얼럿은 제출 영역 바로 위나 폼 맨 위에 두고, 개별 메시지는 각 필드 아래에 aria-describedby와 aria-invalid로 연결해 두세요. 요약은 문제가 몇 개인지 알려주고 필드 수준 메시지는 무엇을 고쳐야 하는지 알려주며, 둘 다 있으면 키보드와 스크린 리더 사용자가 실패 지점을 찾아 헤매지 않습니다.

얼럿에 role="alert"가 필요한가요?

항상 그렇지는 않습니다. role="alert"는 제출 시도 후의 검증 실패처럼 동적으로 나타나 끼어들어야 하는 메시지에만 사용하세요. 페이지 로드 시점부터 존재하는 얼럿은 일반 region이거나 role="status"를 써야 합니다. 초기 렌더에서 assertive 라이브 리전을 쓰면 페이지의 다른 모든 것을 덮어 읽어버리기 때문입니다.