프로덕트

아티클

전체 보기
윤민석

윤민석

Mincho Variants 기능 릴리즈!!

PMC S24를 위해 Variants 기능을 릴리즈 하였습니다.

Vanilla Extract에서는 Recipe라고 알려진 기능으로,

저희 릴리즈 버전에서는 몇가지 기능이 추가되었는데요

1. Flatten Base Style

원래는 base 키에서만 기본 스타일을 지정할 사용할 수 있었지만,

const button = rules({
  base: {
    color: "black",
    backgroundColor: "white",
    borderRadius: 6
  }
});

Stitches처럼 바로 스타일을 작성가능하도록 했습니다.

const button = rules({
  color: "black",
  backgroundColor: "white",
  borderRadius: 6,
});

2. Toggle Variants

기존에는 toggle 해야하는 스타일은 `true`라는 variants로 설정하도록 되어있었는데요,

const button = rules({
  variants: {
    rounded: {
      true: { borderRadius: 999 }
    }
  }
});

저희는 toggles라는 필드를 넣어 간편히 토글 variants를 설정할 수 있도록 하였습니다.

const button = rules({
  toggles: {
    rounded: { borderRadius: 999 }
  }
});

3. 배열값을 허용하는 타입추론 및 사용법

기존에는 toggle 때와 마찬가지로 true를 사용했어야 했지만,

const button = rules({
  variants: {
    rounded: {
      true: { borderRadius: 999 }
    }
    outlined: {
      true: { border: "1px solid black" }
    },
    size: {
      small: { padding: 12 },
      medium: { padding: 16 },
      large: { padding: 24 }
    }
  },

  defaultVariants: {
    rounded: true,
    outlined: true
  }
  compoundVariants: [
    {
      variants: {
        outlined: true,
        size: "small",
      },
      style: {
        fontSize: "16px"
      }
    }
  ]
});

배열을 사용할 경우 자동적으로 true로 사용하도록 만들고 타입추론까지 되도록 하였습니다.

const button = rules({
  variants: {
    rounded: {
      true: { borderRadius: 999 }
    }
    outlined: {
      true: { border: "1px solid black" }
    },
    size: {
      small: { padding: 12 },
      medium: { padding: 16 },
      large: { padding: 24 }
    }
  },

  defaultVariants: ["rounded", "outlined"],
  compoundVariants: [
    {
      variants: ["outlined", { size: "small" }],
      style: {
        fontSize: "16px"
      }
    }
  ]
});

button을 사용할때도 마찬가지로 배열을 허용하고 자동변환됩니다.

const myButton = button(["outlined", "rounded"]);

4. CSS()와의 연동

일반 스타일링을 담당하는 css()에 그대로 넣으면, 기본 Variants를 사용하도록하여 편의성을 높혔습니다.

const base = css({ color: red });
const myRule = rules({
  background: blue,
  props: ["padding"],
  toggles: {
    rounded: { borderRadius: 999 }
  }
});

const myCss = css([base, myRules]); // Same as [base, myRules()]

아직 목표했던 모든 기능을 릴리즈하지는 못했지만, 다양한 편의기능이 들어갔어요.

그럼 11월 공개SW 대회를 목표로 계속 열심히 해보도록 하겠습니다!!

Mincho

디자인시스템을 위한 CSS in JS 프레임워크

3
2
윤민석

윤민석

49만뷰, 절반의 성공 절반의 실패

이전글에서 글을 쓰고 있었다고 했었는데요,

dev.to에 공개했습니다!!

절반의 성공

절반의 성공은 예상외로 트위터에서 흥했다는 점이에요.

image.png

dev.to 블로그에서도 흥해서 매니저들이 뽑은 Top7 글이자,

image.png

금주 최고의 CSS 글로 표시되는 명예를 얻었어요.

image.png

제가 원래 트위터나 dev.to는 사용하지 않고, GitHub와 HackerNews위주로 홍보했던 방침을 바꾼 결과에요.

깃허브 스타도 35개가 되었죠.

image.png

절반의 실패

새로운 마케팅 방법을 시도한 것은 좋았지만,
기존 방법은 실패해버리고 말았어요.

앞서 말씀드린 HackerNews는 디자인이 투박하지만, OpenAI의 샘 알트먼이 사장으로 있었을 만큼 VC 투자로서도 유명한 사이트입니다.

순위권 안에 들면 자동으로 레딧, 페이스북, 트위터등으로 퍼지는등 강력한 영향력을 가지고 있죠.

그런데 제 글이 DEAD표시가 되어 알아보니, Dev.to의 글들은 전반적인 품질이 낮아 광역 스팸 필터..가 걸려있다고 하더라고요.

이미지이미지

트위터, 디스코드등에 홍보하여 모든 트래픽이 HN에 집중적으로 모이도록 해서, 다시 퍼지게 하려는 계획이었는데 플랫폼을 잘못 고르는 바람에 실패해버리고 말았네요. ㅠㅠ

그래서 다음에는 Medium을 활용해볼까 생각중입니다.

다음에는 더 잘 할 수 있을거라 믿으며..

이 글이 재미있었거나, 도움이 조금이라도 되었다면 스타를..!!ㅠㅠ

Mincho

디자인시스템을 위한 CSS in JS 프레임워크

5
0
윤민석

윤민석

17:1 경쟁률 패스!! 팀원 모집합니다.

저희가 만들고 있는 프로젝트, Mincho가 공개SW 개발자대회 1차를 패스했습니다.

접수번호상 약 700명 가까이 지원하는 대규모 대회라 좋은 소식이 아닐 수가 없습니다.

spill_800x800_ec3c23059570f1f3ca60c74775b6b18538f9a1ad2.png

(그 와중에 발견하기 쉬운 우리팀..ㅋㅋ) Designed by Freepik

저희는 현재 저와 정준님으로 구성된 작은 팀입니다.

저희는 현재 CSS-in-JS 라이브러리인 'mincho'를 개발 중에 있습니다. 이 라이브러리는 기존 CSS-in-JS 솔루션들의 장점을 취하면서도, 더 나은 개발자 경험과 성능을 제공해 디자인 시스템에 통합하는 것을 목표로 하고 있습니다.

읽어보시면 아시겠지만 전반적으로 프로젝트 볼륨이 크다보니 개발자가 1~2분 더 계시면 좋지 않을까 싶더라고요.
이 와중에 PMC 2024에서 팀매칭을 지원해주신다!! 하길래 지원을 하게되었습니다.

저희의 주된 목적은 오픈 소스 커뮤니티에 기여하고, 개발자들에게 유용한 도구를 제공하는 것입니다. 물론 이 과정에서 우리의 기술적 역량을 키우고, 새로운 도전을 즐기는 것도 중요한 동기가 되고 있습니다.

공모전도 일종의 동기부여 중 일부입니다.

저희가 찾는 분은:

  • TypeScript랑 친한 사이인 분 (아주 깊은 사이까지는 아니어도 돼요 😉)

  • CSS를 보면 "아, 이거 알아!"하는 정도

  • Git으로 협업해본 경험이 있는 분

관심 있으신 분들은 커피챗 기능으로 부담 없이 연락주세요.

커피 한 잔 하면서 이야기 나눠봐요! (부담스러우시면 메일/디코도 괜찮습니다)

PS: CSS 때문에 머리 아프셨던 분들, 우리랑 함께 그 고통을 없애봐요!

Mincho

디자인시스템을 위한 CSS in JS 프레임워크

1
0
윤민석

윤민석

Mincho 프로젝트의 이번주 #6 - 작가님..9800자 쪽지보냈습니다!!

이전 글에서 문서화 작업을 하고 있다고 말씀드리고 소식이 잠시 끊겼었습니다.

이제 배포를 하기위해 문서화 작업들을 주로 하고 있어요.

  • README 파일들을 작성

  • dev.to 같은 외국 블로그에 소개하기 위한 글

  • Vanilla Extract의 커뮤니티에 소개하기 위한 글

그도 그럴만한게 저는 다른 프로젝트를 보아도 문서화에 공을 엄청나게 들이는 편입니다.

이번 프로젝트도 마찬가지입니다.

근데 제가 봐도 양과 들어간 지식의 양이 엄청나게 넓고 디테일해요...

image.png

아무래도 디자인, CSS, 각종 웹환경과 방법론, 구현체등등 글에서 다루어야 하는 내용 자체가 많다보니 제가 봐도 어색하고 퇴고가 반드시 필요하다 느꼈습니다.

그래서 다양한 곳을 통해 베타리딩을 실행하고, 피드백을 받았는데요.

EasyLogic Studio나 Flitter의 개발자님들처럼 프론트에 대한 많은 고민을 하시던 분들이 많으셔서 유용했습니다.

그리고 그 중에는 정말 감동적인 리뷰(9800자 쪽지)도 있었습니다.

제가 부족하다 느끼는 부분들을 하나하나 다 훑어주시는 엄청난 글 구성 능력자..!

image.png

사실 양이 너무 많아서 저도 대부분의 리뷰가 옳다고 느끼면서도 반영을 하지는 못했는데요.

발표자료에 쓸때도 유용한 피드백이라 레퍼런스로 계속 써도 좋겠다는 생각이 들었습니다.

이렇게 적극적인 독자분을 만날 수 있는건 행운인 것 같네요.

흠흠.. 저도 디콰 여러분에게 사소한팁을 하나 풀어보겠습니다!!

LLM을 이용해 글을 평가하고 싶을때 이렇게 해보세요.

다음 글을 읽고, 박평식처럼 평론을 해줘.

Screenshot 2024-09-01 at 01-59-09 Phind - ## 1. What is CSS in JS CSS in JS is a technique that allows you to write CSS styles directly within your JavaScript(or TypeScript) code. Instead of creating separate CSS files you can define styles along[...].png

박평식님이 별 7개라면..나름 괜찮죠??

혹시 뼈가 뿌러지고 싶을정도로 솔직한 답변을 받고 싶다면?

"신랄하게"를 넣어보십시오.

다음 글을 읽고, 박평식 스타일로 신랄하게 평론을 해줘.

저는 괜히 해봤다가 가루가 되버려서 올리지 않겠습니다 =3=3

그럼 다음주는 디콰 줌 미팅을 주제로 만나요.

- 끝 -

Mincho

디자인시스템을 위한 CSS in JS 프레임워크

2
0
윤민석

윤민석

Mincho 프로젝트의 이번주 #5 - 기본 기능 완성!!

소개글

주간레터

  1. Mincho 프로젝트의 이번주 #1 - 팀 빌딩하는 방법

  2. Mincho 프로젝트의 이번주 #2 - RFC-TDD 프로세스로 개발하기

  3. Mincho 프로젝트의 이번주 #3 - 깃허브 봇들과 함께해요

  4. Mincho 프로젝트의 이번주 #4 - JSON 콘솔 디버깅 라이브러리 배포

  5. Mincho 프로젝트의 이번주 #5 - 기본 기능 완성!! (현재)

저번주의 주간레터는 한번 건너 뛰었는데요,

제가 여행갔다 오느라 작업을 거의 못해서 입니다.

그래도 이번주에는 다행히 배포를 위한 모든 기능을 구현했습니다.

마지막으로 구현한 기능이 생각보다 어려웠네요.

Variant Reference 라는 기능인데요, %Variant이름 을 자리표시자로 두고 참조할 수 있게 만들어 줍니다.

export const myCss = cssVariant({
  primary: {
    color: "red",
    ":has(%secondary)": {
      color: "blue",
    }
  },
  secondary: {
    color: "black",
    "%primary &":{
      color: "white"
    }
  }
});

확실히 전처리기에서 있을범직한 기능이죠.

export const myCss = styleVariant({
  primary: {
    color: "red",
  },
  secondary: {
    color: "black",
  }
});
globalCSS(`${myCss["primary"]}:has(${myCss["secondary"]})`, {
  color: "blue"
});
globalCSS(`${myCss["primary"]} ${myCss["secondary"]}`, {
  color: "white"
});

이제 배포를 하기위해 문서화 작업들을 주로 하고 있어요.

  • README 파일들을 작성

  • dev.to 같은 외국 블로그에 소개하기 위한 글

  • Vanilla Extract의 커뮤니티에 소개하기 위한 글

image.png아무래도 트래픽은 한번에 몰리는 특징이 있다보니, 여러가지 준비가 필요한 것 같아요.

이외에 개발은 changesets를 이용한 Monorepo 자동 버저닝/CHANGLOG 생성과 CommonJS, ESM에서 테스트 검증이 있겠네요.

아 참, 새로운 RFC도 병렬적으로 이루지고 있어요.
새로운 RFC는 흔히 Variants(혹은 recipe)라고 불리는 것으로서 다이나믹한 Props을 다루거나 BEM을 쉽게 구현할 수 있도록 도와주는 역할이에요.

자세한건 다음에 쓸 소개글에 더 적어보도록 하겠습니다.

생각보다 일정잡는게 빡세네요.

Mincho

디자인시스템을 위한 CSS in JS 프레임워크

5
2

포스트

아직 포스트가 없습니다.