diff --git a/src/components/TeamMarketing/TeamPricing.tsx b/src/components/TeamMarketing/TeamPricing.tsx
index 371ef4239..a54a6429c 100644
--- a/src/components/TeamMarketing/TeamPricing.tsx
+++ b/src/components/TeamMarketing/TeamPricing.tsx
@@ -64,7 +64,7 @@ export function TeamPricing() {
diff --git a/src/components/TeamMemberDetails/TeamMemberDetailsPage.tsx b/src/components/TeamMemberDetails/TeamMemberDetailsPage.tsx
deleted file mode 100644
index 4d49946db..000000000
--- a/src/components/TeamMemberDetails/TeamMemberDetailsPage.tsx
+++ /dev/null
@@ -1,215 +0,0 @@
-import { useEffect, useState } from 'react';
-import { httpGet } from '../../lib/http';
-import { pageProgressMessage } from '../../stores/page';
-import { getUrlParams } from '../../lib/browser';
-import { useToast } from '../../hooks/use-toast';
-import type { TeamMemberDocument } from '../TeamMembers/TeamMembersPage';
-import type { UserProgress } from '../TeamProgress/TeamProgressPage';
-import type { TeamActivityStreamDocument } from '../TeamActivity/TeamActivityPage';
-import { ResourceProgress } from '../Activity/ResourceProgress';
-import { ActivityStream } from '../Activity/ActivityStream';
-import { MemberRoleBadge } from '../TeamMembers/RoleBadge';
-import { TeamMemberEmptyPage } from './TeamMemberEmptyPage';
-import { Pagination } from '../Pagination/Pagination';
-import type { ResourceType } from '../../lib/resource-progress';
-import { MemberProgressModal } from '../TeamProgress/MemberProgressModal';
-import { useStore } from '@nanostores/react';
-import { $currentTeam } from '../../stores/team';
-import { MemberCustomProgressModal } from '../TeamProgress/MemberCustomProgressModal';
-
-type GetTeamMemberProgressesResponse = TeamMemberDocument & {
- name: string;
- avatar: string;
- email: string;
- progresses: UserProgress[];
-};
-
-type GetTeamMemberActivityResponse = {
- data: TeamActivityStreamDocument[];
- totalCount: number;
- totalPages: number;
- currPage: number;
- perPage: number;
-};
-
-export function TeamMemberDetailsPage() {
- const { t: teamId, m: memberId } = getUrlParams() as { t: string; m: string };
-
- const toast = useToast();
- const currentTeam = useStore($currentTeam);
-
- const [memberProgress, setMemberProgress] =
- useState(null);
- const [memberActivity, setMemberActivity] =
- useState(null);
- const [currPage, setCurrPage] = useState(1);
-
- const [selectedResource, setSelectedResource] = useState<{
- resourceId: string;
- resourceType: ResourceType;
- isCustomResource?: boolean;
- } | null>(null);
-
- const loadMemberProgress = async () => {
- const { response, error } = await httpGet(
- `${import.meta.env.PUBLIC_API_URL}/v1-get-team-member-progresses/${teamId}/${memberId}`,
- );
- if (error || !response) {
- pageProgressMessage.set('');
- toast.error(error?.message || 'Failed to load team member');
- return;
- }
-
- setMemberProgress(response);
- };
-
- const loadMemberActivity = async (currPage: number = 1) => {
- const { response, error } = await httpGet(
- `${import.meta.env.PUBLIC_API_URL}/v1-get-team-member-activity/${teamId}/${memberId}`,
- {
- currPage,
- },
- );
- if (error || !response) {
- pageProgressMessage.set('');
- toast.error(error?.message || 'Failed to load team member activity');
- return;
- }
-
- setMemberActivity(response);
- setCurrPage(response?.currPage || 1);
- };
-
- useEffect(() => {
- if (!teamId) {
- return;
- }
-
- Promise.allSettled([loadMemberProgress(), loadMemberActivity()]).finally(
- () => {
- pageProgressMessage.set('');
- },
- );
- }, [teamId]);
-
- if (!teamId || !memberId || !memberProgress || !memberActivity) {
- return null;
- }
-
- const avatarUrl = memberProgress?.avatar
- ? `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${memberProgress?.avatar}`
- : '/images/default-avatar.png';
-
- const ProgressModal =
- selectedResource && !selectedResource.isCustomResource
- ? MemberProgressModal
- : MemberCustomProgressModal;
-
- return (
- <>
- {selectedResource && (
- setSelectedResource(null)}
- onShowMyProgress={() => {
- window.location.href = `/team/member?t=${teamId}&m=${currentTeam?.memberId}`;
- }}
- />
- )}
-
-
-
-
{memberProgress?.name}
-
{memberProgress?.email}
-
-
-
- {memberProgress?.progresses && memberProgress?.progresses?.length > 0 ? (
- <>
-
- Progress Overview
-
-
- {memberProgress?.progresses?.map((progress) => {
- const learningCount = progress.learning || 0;
- const doneCount = progress.done || 0;
- const totalCount = progress.total || 0;
- const skippedCount = progress.skipped || 0;
-
- return (
- totalCount ? totalCount : doneCount}
- learningCount={
- learningCount > totalCount ? totalCount : learningCount
- }
- totalCount={totalCount}
- skippedCount={skippedCount}
- resourceId={progress.resourceId}
- resourceType={'roadmap'}
- updatedAt={progress.updatedAt}
- title={progress.resourceTitle}
- roadmapSlug={progress.roadmapSlug}
- showActions={false}
- onResourceClick={() => {
- setSelectedResource({
- resourceId: progress.resourceId,
- resourceType: progress.resourceType,
- isCustomResource: progress.isCustomResource,
- });
- }}
- />
- );
- })}
-
- >
- ) : (
-
- )}
-
- {memberActivity?.data && memberActivity?.data?.length > 0 ? (
- <>
- act.activity) || []
- }
- onResourceClick={(resourceId, resourceType, isCustomResource) => {
- setSelectedResource({
- resourceId,
- resourceType,
- isCustomResource,
- });
- }}
- />
- {
- pageProgressMessage.set('Loading Activity');
- loadMemberActivity(page).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- />
- >
- ) : null}
- >
- );
-}
diff --git a/src/components/TeamMemberDetails/TeamMemberEmptyPage.tsx b/src/components/TeamMemberDetails/TeamMemberEmptyPage.tsx
deleted file mode 100644
index 4de37f834..000000000
--- a/src/components/TeamMemberDetails/TeamMemberEmptyPage.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { RoadmapIcon } from '../ReactIcons/RoadmapIcon';
-
-type TeamMemberEmptyPageProps = {
- teamId: string;
-};
-
-export function TeamMemberEmptyPage(props: TeamMemberEmptyPageProps) {
- const { teamId } = props;
-
- return (
-
-
-
-
-
No Progress
-
- Progress will appear here as they start tracking their roadmaps.
-
-
-
- );
-}
diff --git a/src/components/TeamMembers/LeaveTeamButton.tsx b/src/components/TeamMembers/LeaveTeamButton.tsx
deleted file mode 100644
index 13f98f932..000000000
--- a/src/components/TeamMembers/LeaveTeamButton.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { useState } from 'react';
-import { LeaveTeamPopup } from './LeaveTeamPopup';
-
-type LeaveTeamButtonProps = {
- teamId: string;
-};
-
-export function LeaveTeamButton(props: LeaveTeamButtonProps) {
- const [showLeaveTeamPopup, setShowLeaveTeamPopup] = useState(false);
-
- return (
- <>
- {showLeaveTeamPopup && (
- {
- setShowLeaveTeamPopup(false);
- }}
- />
- )}
- {
- setShowLeaveTeamPopup(true);
- }}
- className="flex h-7 min-w-[95px] items-center justify-center rounded-md border border-gray-200 bg-gray-50 px-2 py-1.5 text-sm font-medium leading-none text-red-600"
- >
- Leave team
-
- >
- );
-}
diff --git a/src/components/TeamMembers/LeaveTeamPopup.tsx b/src/components/TeamMembers/LeaveTeamPopup.tsx
deleted file mode 100644
index 3ef71c932..000000000
--- a/src/components/TeamMembers/LeaveTeamPopup.tsx
+++ /dev/null
@@ -1,124 +0,0 @@
-import { type FormEvent, useEffect, useRef, useState } from 'react';
-import { httpDelete } from '../../lib/http';
-import { useTeamId } from '../../hooks/use-team-id';
-import { useOutsideClick } from '../../hooks/use-outside-click';
-
-type LeaveTeamPopupProps = {
- onClose: () => void;
-};
-
-export function LeaveTeamPopup(props: LeaveTeamPopupProps) {
- const { onClose } = props;
-
- const popupBodyRef = useRef(null);
- const confirmationEl = useRef(null);
- const [confirmationText, setConfirmationText] = useState('');
- const [isLoading, setIsLoading] = useState(false);
- const [error, setError] = useState('');
- const { teamId } = useTeamId();
-
- useEffect(() => {
- setError('');
- setConfirmationText('');
- confirmationEl?.current?.focus();
- }, []);
-
- const handleSubmit = async (e: FormEvent) => {
- e.preventDefault();
- setIsLoading(true);
- setError('');
-
- if (confirmationText.toUpperCase() !== 'LEAVE') {
- setError('Verification text does not match');
- setIsLoading(false);
- return;
- }
-
- const { response, error } = await httpDelete(
- `${import.meta.env.PUBLIC_API_URL}/v1-leave-team/${teamId}`,
- {}
- );
-
- if (error || !response) {
- setIsLoading(false);
- setError(error?.message || 'Something went wrong');
- return;
- }
-
- window.location.href = '/account?c=tl';
- };
-
- const handleClosePopup = () => {
- setIsLoading(false);
- setError('');
- setConfirmationText('');
-
- onClose();
- };
-
- useOutsideClick(popupBodyRef, handleClosePopup);
-
- return (
-
-
-
-
- Leave Team
-
-
- You will lose access to the team, the roadmaps and progress of other team members.
-
-
- Please type "leave" to confirm.
-
-
-
-
-
- );
-}
diff --git a/src/components/TeamMembers/MemberActionDropdown.tsx b/src/components/TeamMembers/MemberActionDropdown.tsx
deleted file mode 100644
index b2ee89177..000000000
--- a/src/components/TeamMembers/MemberActionDropdown.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-import { useRef, useState } from 'react';
-import type { TeamMemberDocument } from './TeamMembersPage';
-import { useOutsideClick } from '../../hooks/use-outside-click';
-import { MoreVerticalIcon } from '../ReactIcons/MoreVerticalIcon.tsx';
-
-export function MemberActionDropdown({
- member,
- onUpdateMember,
- onDeleteMember,
- onResendInvite,
- isDisabled = false,
- onSendProgressReminder,
- allowProgressReminder = false,
- allowUpdateRole = true,
-}: {
- onDeleteMember: () => void;
- onUpdateMember: () => void;
- onResendInvite: () => void;
- onSendProgressReminder: () => void;
- isDisabled: boolean;
- allowProgressReminder: boolean;
- allowUpdateRole: boolean;
- member: TeamMemberDocument;
-}) {
- const menuRef = useRef(null);
- const [isOpen, setIsOpen] = useState(false);
- const [isLoading, setIsLoading] = useState(false);
-
- useOutsideClick(menuRef, () => {
- setIsOpen(false);
- });
-
- const actions = [
- ...(allowUpdateRole
- ? [
- {
- name: 'Update Role',
- handleClick: () => {
- onUpdateMember();
- setIsOpen(false);
- },
- },
- ]
- : []),
- ...(allowProgressReminder
- ? [
- {
- name: 'Send Progress Reminder',
- handleClick: () => {
- onSendProgressReminder();
- setIsOpen(false);
- },
- },
- ]
- : []),
- ...(['invited'].includes(member.status)
- ? [
- {
- name: 'Resend Invite',
- handleClick: () => {
- onResendInvite();
- setIsOpen(false);
- },
- },
- ]
- : []),
- {
- name: 'Delete',
- handleClick: () => {
- onDeleteMember();
- setIsOpen(false);
- },
- },
- ];
- return (
-
-
setIsOpen(!isOpen)}
- className="ml-2 flex items-center opacity-60 transition-opacity hover:opacity-100 disabled:cursor-not-allowed disabled:opacity-30"
- >
-
-
-
- {isOpen && (
-
-
- {actions.map((action, index) => {
- return (
-
-
- {action.name}
-
-
- );
- })}
-
-
- )}
-
- );
-}
diff --git a/src/components/TeamMembers/RoleBadge.tsx b/src/components/TeamMembers/RoleBadge.tsx
deleted file mode 100644
index f42c81e79..000000000
--- a/src/components/TeamMembers/RoleBadge.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { cn } from '../../lib/classname';
-import type { AllowedRoles } from '../CreateTeam/RoleDropdown';
-
-type RoleBadgeProps = {
- role: AllowedRoles;
- className?: string;
-};
-export function MemberRoleBadge(props: RoleBadgeProps) {
- const { role, className } = props;
-
- return (
-
- {role}
-
- );
-}
diff --git a/src/components/TeamMembers/TeamMemberItem.tsx b/src/components/TeamMembers/TeamMemberItem.tsx
deleted file mode 100644
index 7282aadf8..000000000
--- a/src/components/TeamMembers/TeamMemberItem.tsx
+++ /dev/null
@@ -1,137 +0,0 @@
-import { MailIcon } from '../ReactIcons/MailIcon';
-import { MemberActionDropdown } from './MemberActionDropdown';
-import { MemberRoleBadge } from './RoleBadge';
-import type { TeamMemberItem } from './TeamMembersPage';
-import { $canManageCurrentTeam, $currentTeam } from '../../stores/team';
-import { useStore } from '@nanostores/react';
-import { useAuth } from '../../hooks/use-auth';
-import { cn } from '../../lib/classname';
-
-type TeamMemberProps = {
- member: TeamMemberItem;
- userId: string;
- index: number;
- teamId: string;
- canViewProgress: boolean;
- canManageCurrentTeam: boolean;
- onDeleteMember: () => void;
- onUpdateMember: () => void;
- onSendProgressReminder: () => void;
- onResendInvite: () => void;
-};
-
-export function TeamMemberItem(props: TeamMemberProps) {
- const {
- member,
- index,
- onResendInvite,
- onUpdateMember,
- canManageCurrentTeam,
- userId,
- onDeleteMember,
- onSendProgressReminder,
- canViewProgress = true,
- } = props;
-
- const currentTeam = useStore($currentTeam);
- const canManageTeam = useStore($canManageCurrentTeam);
- const showNoProgressBadge = canViewProgress && !member.hasProgress && member.status === 'joined';
- const allowProgressReminder =
- canManageTeam &&
- !member.hasProgress &&
- member.status === 'joined' &&
- member.userId !== userId;
- const isPersonalProgressOnly =
- currentTeam?.personalProgressOnly &&
- currentTeam.role === 'member' &&
- String(member._id) !== currentTeam.memberId;
-
- return (
-
-
-
-
-
-
-
-
-
-
- {member.status === 'invited' && (
-
- Invited
-
- )}
- {member.status === 'rejected' && (
-
- Rejected
-
- )}
-
-
-
- {member.invitedEmail}
-
-
-
-
-
-
-
-
- {canManageCurrentTeam && (
-
- )}
-
-
- );
-}
diff --git a/src/components/TeamMembers/TeamMembersPage.tsx b/src/components/TeamMembers/TeamMembersPage.tsx
deleted file mode 100644
index a568170bd..000000000
--- a/src/components/TeamMembers/TeamMembersPage.tsx
+++ /dev/null
@@ -1,338 +0,0 @@
-import { useEffect, useState } from 'react';
-import { httpDelete, httpGet, httpPatch } from '../../lib/http';
-import { useAuth } from '../../hooks/use-auth';
-import { pageProgressMessage } from '../../stores/page';
-import type { TeamDocument } from '../CreateTeam/CreateTeamForm';
-import { LeaveTeamButton } from './LeaveTeamButton';
-import type { AllowedRoles } from '../CreateTeam/RoleDropdown';
-import type { AllowedMemberStatus } from '../TeamDropdown/TeamDropdown';
-import { InviteMemberPopup } from './InviteMemberPopup';
-import { getUrlParams } from '../../lib/browser';
-import { UpdateMemberPopup } from './UpdateMemberPopup';
-import { useStore } from '@nanostores/react';
-import { $canManageCurrentTeam } from '../../stores/team';
-import { useToast } from '../../hooks/use-toast';
-import { TeamMemberItem } from './TeamMemberItem';
-
-export interface TeamMemberDocument {
- _id?: string;
- userId?: string;
- invitedEmail?: string;
- teamId: string;
- role: AllowedRoles;
- status: AllowedMemberStatus;
- createdAt: Date;
- updatedAt: Date;
-}
-
-export interface UserResourceProgressDocument {
- _id?: string;
- userId: string;
- resourceId: string;
- resourceType: 'roadmap' | 'best-practice';
- isFavorite?: boolean;
- done: string[];
- learning: string[];
- skipped: string[];
- createdAt: Date;
- updatedAt: Date;
-}
-
-export interface TeamMemberItem extends TeamMemberDocument {
- name: string;
- avatar: string;
- hasProgress: boolean;
-}
-
-const MAX_MEMBER_COUNT = 200;
-
-export function TeamMembersPage() {
- const { t: teamId } = getUrlParams();
-
- const toast = useToast();
- const canManageCurrentTeam = useStore($canManageCurrentTeam);
-
- const [memberToUpdate, setMemberToUpdate] = useState();
- const [isInvitingMember, setIsInvitingMember] = useState(false);
- const [teamMembers, setTeamMembers] = useState([]);
- const [team, setTeam] = useState();
-
- const user = useAuth();
-
- async function loadTeam() {
- const { response, error } = await httpGet(
- `${import.meta.env.PUBLIC_API_URL}/v1-get-team/${teamId}`,
- );
- if (error || !response) {
- toast.error(error?.message || 'Something went wrong');
- return;
- }
-
- if (response) {
- setTeam(response);
- }
- }
-
- async function getTeamMemberList() {
- const { response, error } = await httpGet(
- `${import.meta.env.PUBLIC_API_URL}/v1-get-team-member-list/${teamId}`,
- );
- if (error || !response) {
- toast.error(error?.message || 'Failed to load team member list');
- return;
- }
-
- setTeamMembers(response);
- }
-
- useEffect(() => {
- if (!teamId) {
- return;
- }
-
- Promise.all([loadTeam(), getTeamMemberList()]).finally(() => {
- pageProgressMessage.set('');
- });
- }, [teamId]);
- async function deleteMember(teamId: string, memberId: string) {
- pageProgressMessage.set('Deleting member');
- const { response, error } = await httpDelete(
- `${
- import.meta.env.PUBLIC_API_URL
- }/v1-delete-member/${teamId}/${memberId}`,
- {},
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Something went wrong');
- return;
- }
-
- toast.success('Member has been deleted');
- await getTeamMemberList();
- }
-
- async function resendInvite(teamId: string, memberId: string) {
- pageProgressMessage.set('Resending Invite');
- const { response, error } = await httpPatch(
- `${
- import.meta.env.PUBLIC_API_URL
- }/v1-resend-invite/${teamId}/${memberId}`,
- {},
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Something went wrong');
- return;
- }
-
- toast.success('Invite has been sent');
- }
-
- async function handleSendReminder(teamId: string, memberId: string) {
- pageProgressMessage.set('Sending Reminder');
- const { response, error } = await httpPatch(
- `${
- import.meta.env.PUBLIC_API_URL
- }/v1-send-progress-reminder/${teamId}/${memberId}`,
- {},
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Something went wrong');
- return;
- }
-
- toast.success('Reminder has been sent');
- }
-
- const joinedMembers = teamMembers.filter(
- (member) => member.status === 'joined',
- );
- const invitedMembers = teamMembers.filter(
- (member) => member.status === 'invited',
- );
- const rejectedMembers = teamMembers.filter(
- (member) => member.status === 'rejected',
- );
-
- return (
-
- {memberToUpdate && (
-
{
- pageProgressMessage.set('Refreshing members');
- getTeamMemberList().finally(() => {
- pageProgressMessage.set('');
- });
- setMemberToUpdate(undefined);
- toast.success('Member has been updated');
- }}
- onClose={() => {
- setMemberToUpdate(undefined);
- }}
- />
- )}
- {isInvitingMember && (
- {
- toast.success('Invite sent');
- getTeamMemberList().then(() => null);
- setIsInvitingMember(false);
- }}
- onClose={() => {
- setIsInvitingMember(false);
- }}
- />
- )}
-
-
-
-
- {teamMembers.length} people in the team.
-
-
- {teamMembers.length} members
-
-
-
- {joinedMembers.map((member, index) => {
- return (
-
{
- resendInvite(teamId, member._id!).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- canManageCurrentTeam={canManageCurrentTeam}
- onDeleteMember={() => {
- deleteMember(teamId, member._id!).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- onUpdateMember={() => {
- setMemberToUpdate(member);
- }}
- onSendProgressReminder={() => {
- handleSendReminder(teamId, member._id!).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- />
- );
- })}
-
-
- {invitedMembers.length > 0 && (
-
-
Invited Members
-
- {invitedMembers.map((member, index) => {
- return (
- {
- resendInvite(teamId, member._id!).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- canManageCurrentTeam={canManageCurrentTeam}
- onDeleteMember={() => {
- deleteMember(teamId, member._id!).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- onUpdateMember={() => {
- setMemberToUpdate(member);
- }}
- onSendProgressReminder={() => {
- handleSendReminder(teamId, member._id!).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- />
- );
- })}
-
-
- )}
-
- {rejectedMembers.length > 0 && (
-
-
- Rejected Invites
-
-
- {rejectedMembers.map((member, index) => {
- return (
- {
- resendInvite(teamId, member._id!).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- canManageCurrentTeam={canManageCurrentTeam}
- onDeleteMember={() => {
- deleteMember(teamId, member._id!).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- onUpdateMember={() => {
- setMemberToUpdate(member);
- }}
- onSendProgressReminder={() => {
- handleSendReminder(teamId, member._id!).finally(() => {
- pageProgressMessage.set('');
- });
- }}
- />
- );
- })}
-
-
- )}
-
-
- {canManageCurrentTeam && (
-
- = MAX_MEMBER_COUNT}
- onClick={() => setIsInvitingMember(true)}
- className="block w-full rounded-md border border-dashed border-gray-300 py-2 text-sm transition-colors hover:border-gray-600 hover:bg-gray-50 focus:outline-0"
- >
- + Invite Member
-
-
- )}
-
- {teamMembers.length >= MAX_MEMBER_COUNT && canManageCurrentTeam && (
-
- You have reached the maximum number of members in a team. Please reach
- out to us if you need more.
-
- )}
-
- );
-}
diff --git a/src/components/TeamMembers/UpdateMemberPopup.tsx b/src/components/TeamMembers/UpdateMemberPopup.tsx
deleted file mode 100644
index 5118f5087..000000000
--- a/src/components/TeamMembers/UpdateMemberPopup.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-import { type FormEvent, useRef, useState } from 'react';
-import { httpPut } from '../../lib/http';
-import { useTeamId } from '../../hooks/use-team-id';
-import { useOutsideClick } from '../../hooks/use-outside-click';
-import { type AllowedRoles, RoleDropdown } from '../CreateTeam/RoleDropdown';
-import type { TeamMemberDocument } from './TeamMembersPage';
-
-type InviteMemberPopupProps = {
- member: TeamMemberDocument;
- onUpdated: () => void;
- onClose: () => void;
-};
-
-export function UpdateMemberPopup(props: InviteMemberPopupProps) {
- const { onClose, onUpdated, member } = props;
-
- const popupBodyRef = useRef(null);
- const [selectedRole, setSelectedRole] = useState(member.role);
- const [isLoading, setIsLoading] = useState(false);
- const [error, setError] = useState('');
- const { teamId } = useTeamId();
-
- const handleSubmit = async (e: FormEvent) => {
- e.preventDefault();
- setIsLoading(true);
- setError('');
-
- const { response, error } = await httpPut(
- `${import.meta.env.PUBLIC_API_URL}/v1-update-member-role/${teamId}/${
- member._id
- }`,
- { role: selectedRole }
- );
-
- if (error || !response) {
- setIsLoading(false);
- setError(error?.message || 'Something went wrong');
- return;
- }
-
- setIsLoading(false);
- onUpdated();
- };
-
- const handleClosePopup = () => {
- setIsLoading(false);
- setError('');
-
- onClose();
- };
-
- useOutsideClick(popupBodyRef, handleClosePopup);
-
- return (
-
-
-
-
- Update Role
-
-
- Select the role to update for this member
-
-
-
-
-
-
- );
-}
diff --git a/src/components/TeamProgress/GroupRoadmapItem.tsx b/src/components/TeamProgress/GroupRoadmapItem.tsx
index c09465720..ec1772360 100644
--- a/src/components/TeamProgress/GroupRoadmapItem.tsx
+++ b/src/components/TeamProgress/GroupRoadmapItem.tsx
@@ -66,7 +66,7 @@ export function GroupRoadmapItem(props: GroupRoadmapItemProps) {
? `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${
member.member.avatar
}`
- : '/images/default-avatar.png'
+ : '/img/default-avatar.png'
}
alt={member.member.name || ''}
className="h-5 w-5 shrink-0 rounded-full"
diff --git a/src/components/TeamProgress/MemberProgressItem.tsx b/src/components/TeamProgress/MemberProgressItem.tsx
index aea8dc416..5da698ed9 100644
--- a/src/components/TeamProgress/MemberProgressItem.tsx
+++ b/src/components/TeamProgress/MemberProgressItem.tsx
@@ -45,7 +45,7 @@ export function MemberProgressItem(props: MemberProgressItemProps) {
src={
member.avatar
? `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${member.avatar}`
- : '/images/default-avatar.png'
+ : '/img/default-avatar.png'
}
alt={member.name || ''}
className="h-8 min-h-[32px] w-8 min-w-[32px] rounded-full"
diff --git a/src/components/TeamRoadmap/CustomTeamRoadmap.tsx b/src/components/TeamRoadmap/CustomTeamRoadmap.tsx
deleted file mode 100644
index 289ec4de3..000000000
--- a/src/components/TeamRoadmap/CustomTeamRoadmap.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export function CustomTeamRoadmap() {
- return null;
-}
\ No newline at end of file
diff --git a/src/components/TeamRoadmap/DefaultTeamRoadmap.tsx b/src/components/TeamRoadmap/DefaultTeamRoadmap.tsx
deleted file mode 100644
index 995e63d16..000000000
--- a/src/components/TeamRoadmap/DefaultTeamRoadmap.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export function DefaultTeamRoadmap() {
- return null;
-}
diff --git a/src/components/TeamRoadmapsList/RoadmapActionDropdown.tsx b/src/components/TeamRoadmapsList/RoadmapActionDropdown.tsx
deleted file mode 100644
index 7a5ccc956..000000000
--- a/src/components/TeamRoadmapsList/RoadmapActionDropdown.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-import { useRef, useState } from 'react';
-import { useOutsideClick } from '../../hooks/use-outside-click';
-import { Lock, MoreVertical, Shapes, Trash2 } from 'lucide-react';
-import { MoreVerticalIcon } from '../ReactIcons/MoreVerticalIcon.tsx';
-
-type RoadmapActionDropdownProps = {
- onDelete?: () => void;
- onCustomize?: () => void;
- onUpdateSharing?: () => void;
-};
-
-export function RoadmapActionDropdown(props: RoadmapActionDropdownProps) {
- const { onDelete, onUpdateSharing, onCustomize } = props;
-
- const menuRef = useRef(null);
- const [isOpen, setIsOpen] = useState(false);
-
- useOutsideClick(menuRef, () => {
- setIsOpen(false);
- });
-
- return (
-
-
setIsOpen(!isOpen)}
- className="hidden items-center opacity-60 transition-opacity hover:opacity-100 disabled:cursor-not-allowed disabled:opacity-30 sm:flex"
- >
-
-
-
setIsOpen(!isOpen)}
- className="flex items-center gap-1 rounded-md border border-gray-300 bg-white px-2 py-1.5 text-xs hover:bg-gray-50 focus:outline-hidden sm:hidden"
- >
-
- Options
-
-
- {isOpen && (
-
-
- {onUpdateSharing && (
-
- {
- setIsOpen(false);
- onUpdateSharing();
- }}
- className="flex w-full cursor-pointer items-center rounded-sm p-2 text-sm font-medium text-slate-100 hover:bg-slate-700"
- >
-
- Sharing
-
-
- )}
- {onCustomize && (
-
- {
- setIsOpen(false);
- onCustomize();
- }}
- className="flex w-full cursor-pointer items-center rounded-sm p-2 text-sm font-medium text-slate-100 hover:bg-slate-700"
- >
-
- Customize
-
-
- )}
- {onDelete && (
-
- {
- setIsOpen(false);
- onDelete();
- }}
- className="flex w-full cursor-pointer items-center rounded-sm p-2 text-sm font-medium text-slate-100 hover:bg-slate-700"
- >
-
- Delete
-
-
- )}
-
-
- )}
-
- );
-}
diff --git a/src/components/TeamRoadmapsList/TeamRoadmaps.tsx b/src/components/TeamRoadmapsList/TeamRoadmaps.tsx
deleted file mode 100644
index 9058f96c7..000000000
--- a/src/components/TeamRoadmapsList/TeamRoadmaps.tsx
+++ /dev/null
@@ -1,690 +0,0 @@
-import { getUrlParams } from '../../lib/browser';
-import { useEffect, useState } from 'react';
-import type { TeamDocument } from '../CreateTeam/CreateTeamForm';
-import type { TeamResourceConfig } from '../CreateTeam/RoadmapSelector';
-import { httpGet, httpPut } from '../../lib/http';
-import { pageProgressMessage } from '../../stores/page';
-import type { PageType } from '../CommandMenu/CommandMenu';
-import { useStore } from '@nanostores/react';
-import { $canManageCurrentTeam } from '../../stores/team';
-import { useToast } from '../../hooks/use-toast';
-import { SelectRoadmapModal } from '../CreateTeam/SelectRoadmapModal';
-import { PickRoadmapOptionModal } from '../TeamRoadmaps/PickRoadmapOptionModal';
-import type { AllowedRoadmapVisibility } from '../CustomRoadmap/CreateRoadmap/CreateRoadmapModal';
-import { CreateRoadmapModal } from '../CustomRoadmap/CreateRoadmap/CreateRoadmapModal';
-import {
- ExternalLink,
- Globe,
- LockIcon,
- type LucideIcon,
- Package,
- PackageMinus,
- PenSquare,
- Shapes,
- Users,
-} from 'lucide-react';
-import { RoadmapActionDropdown } from './RoadmapActionDropdown';
-import { UpdateTeamResourceModal } from '../CreateTeam/UpdateTeamResourceModal';
-import { ShareOptionsModal } from '../ShareOptions/ShareOptionsModal';
-import { cn } from '../../lib/classname';
-import { RoadmapIcon } from '../ReactIcons/RoadmapIcon.tsx';
-import { ContentConfirmationModal } from '../CreateTeam/ContentConfirmationModal.tsx';
-
-export function TeamRoadmaps() {
- const { t: teamId } = getUrlParams();
-
- const canManageCurrentTeam = useStore($canManageCurrentTeam);
-
- const toast = useToast();
-
- const [isLoading, setIsLoading] = useState(true);
- const [isPickingOptions, setIsPickingOptions] = useState(false);
- const [isAddingRoadmap, setIsAddingRoadmap] = useState(false);
- const [isCreatingRoadmap, setIsCreatingRoadmap] = useState(false);
- const [changingRoadmapId, setChangingRoadmapId] = useState('');
- const [team, setTeam] = useState();
- const [teamResources, setTeamResources] = useState([]);
- const [allRoadmaps, setAllRoadmaps] = useState([]);
- const [selectedResource, setSelectedResource] = useState<
- TeamResourceConfig[0] | null
- >(null);
- const [confirmationContentId, setConfirmationContentId] = useState('');
-
- async function loadAllRoadmaps() {
- const { error, response } = await httpGet(`/pages.json`);
-
- if (error) {
- toast.error(error.message || 'Something went wrong');
- return;
- }
-
- if (!response) {
- return [];
- }
-
- const allRoadmaps = response
- .filter((page) => page.group === 'Roadmaps')
- .sort((a, b) => {
- if (a.title === 'Android') return 1;
- return a.title.localeCompare(b.title);
- });
-
- setAllRoadmaps(allRoadmaps);
- return response;
- }
-
- async function loadTeam(teamIdToFetch: string) {
- const { response, error } = await httpGet(
- `${import.meta.env.PUBLIC_API_URL}/v1-get-team/${teamIdToFetch}`,
- );
-
- if (error || !response) {
- toast.error('Error loading team');
- window.location.href = '/account';
- return;
- }
-
- setTeam(response);
- }
-
- async function loadTeamResourceConfig(teamId: string) {
- const { error, response } = await httpGet(
- `${import.meta.env.PUBLIC_API_URL}/v1-get-team-resource-config/${teamId}`,
- );
- if (error || !Array.isArray(response)) {
- console.error(error);
- return;
- }
-
- setTeamResources(response);
- }
-
- useEffect(() => {
- if (!teamId) {
- return;
- }
-
- setIsLoading(true);
- Promise.all([
- loadTeam(teamId),
- loadTeamResourceConfig(teamId),
- loadAllRoadmaps(),
- ]).finally(() => {
- pageProgressMessage.set('');
- setIsLoading(false);
- });
- }, [teamId]);
-
- async function deleteResource(roadmapId: string) {
- if (!team?._id) {
- return;
- }
-
- toast.loading('Deleting roadmap');
- pageProgressMessage.set(`Deleting roadmap from team`);
- const { error, response } = await httpPut(
- `${import.meta.env.PUBLIC_API_URL}/v1-delete-team-resource-config/${
- team._id
- }`,
- {
- resourceId: roadmapId,
- resourceType: 'roadmap',
- },
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Something went wrong');
- return;
- }
-
- toast.success('Roadmap removed');
- setTeamResources(response);
- }
-
- async function onAdd(roadmapId: string, shouldCopyContent = false) {
- if (!teamId) {
- return;
- }
-
- toast.loading('Adding roadmap');
- pageProgressMessage.set('Adding roadmap');
- setIsLoading(true);
- const roadmap = allRoadmaps.find((r) => r.id === roadmapId);
- const { error, response } = await httpPut(
- `${
- import.meta.env.PUBLIC_API_URL
- }/v1-update-team-resource-config/${teamId}`,
- {
- teamId: teamId,
- resourceId: roadmapId,
- resourceType: 'roadmap',
- removed: [],
- renderer: roadmap?.renderer || 'balsamiq',
- shouldCopyContent,
- },
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Error adding roadmap');
- return;
- }
-
- setTeamResources(response);
- toast.success('Roadmap added');
- if (roadmap?.renderer === 'editor') {
- setIsAddingRoadmap(false);
- }
- }
-
- async function onRemove(resourceId: string) {
- pageProgressMessage.set('Removing roadmap');
-
- deleteResource(resourceId).finally(() => {
- pageProgressMessage.set('');
- });
- }
-
- useEffect(() => {
- function handleCustomRoadmapCreated(event: Event) {
- const { roadmapId } = (event as CustomEvent)?.detail;
- if (!roadmapId) {
- return;
- }
-
- loadAllRoadmaps().finally(() => {});
- onAdd(roadmapId).finally(() => {
- pageProgressMessage.set('');
- });
- }
- window.addEventListener(
- 'custom-roadmap-created',
- handleCustomRoadmapCreated,
- );
-
- return () => {
- window.removeEventListener(
- 'custom-roadmap-created',
- handleCustomRoadmapCreated,
- );
- };
- }, []);
-
- if (!team) {
- return null;
- }
-
- const pickRoadmapOptionModal = isPickingOptions && (
- setIsPickingOptions(false)}
- showDefaultRoadmapsModal={() => {
- setIsAddingRoadmap(true);
- setIsPickingOptions(false);
- }}
- showCreateCustomRoadmapModal={() => {
- setIsCreatingRoadmap(true);
- setIsPickingOptions(false);
- }}
- />
- );
-
- const filteredAllRoadmaps = allRoadmaps.filter(
- (r) => !teamResources.find((c) => c?.defaultRoadmapId === r.id),
- );
- const addRoadmapModal = isAddingRoadmap && (
- setIsAddingRoadmap(false)}
- teamResourceConfig={teamResources.map((c) => c.resourceId)}
- allRoadmaps={filteredAllRoadmaps.filter((r) => r.renderer === 'editor')}
- teamId={teamId}
- onRoadmapAdd={(roadmapId: string) => {
- const isEditorRoadmap = allRoadmaps.find(
- (r) => r.id === roadmapId && r.renderer === 'editor',
- );
-
- if (!isEditorRoadmap) {
- onAdd(roadmapId).finally(() => {
- pageProgressMessage.set('');
- });
-
- return;
- }
-
- setIsAddingRoadmap(false);
- setConfirmationContentId(roadmapId);
- }}
- onRoadmapRemove={(roadmapId: string) => {
- if (confirm('Are you sure you want to remove this roadmap?')) {
- onRemove(roadmapId).finally(() => {});
- }
- }}
- />
- );
-
- const confirmationContentIdModal = confirmationContentId && (
- {
- setConfirmationContentId('');
- }}
- onClick={(shouldCopy) => {
- onAdd(confirmationContentId, shouldCopy).finally(() => {
- pageProgressMessage.set('');
- setConfirmationContentId('');
- });
- }}
- />
- );
-
- const createRoadmapModal = isCreatingRoadmap && (
- {
- setIsCreatingRoadmap(false);
- }}
- onCreated={() => {
- loadTeamResourceConfig(teamId).finally(() => null);
- setIsCreatingRoadmap(false);
- }}
- />
- );
-
- const placeholderRoadmaps = teamResources.filter(
- (c: TeamResourceConfig[0]) => c.isCustomResource && !c.topics,
- );
- const customRoadmaps = teamResources.filter(
- (c: TeamResourceConfig[0]) => c.isCustomResource && c.topics,
- );
- const defaultRoadmaps = teamResources.filter(
- (c: TeamResourceConfig[0]) => !c.isCustomResource,
- );
-
- const hasRoadmaps =
- customRoadmaps.length > 0 ||
- defaultRoadmaps.length > 0 ||
- (placeholderRoadmaps.length > 0 && canManageCurrentTeam);
- if (!hasRoadmaps && !isLoading) {
- return (
-
- {pickRoadmapOptionModal}
- {addRoadmapModal}
- {createRoadmapModal}
- {confirmationContentIdModal}
-
-
-
-
No roadmaps
-
- {canManageCurrentTeam
- ? 'Add a roadmap to start tracking your team'
- : 'Ask your team admin to add some roadmaps'}
-
-
- {canManageCurrentTeam && (
-
setIsPickingOptions(true)}
- >
- Add roadmap
-
- )}
-
- );
- }
-
- const customizeRoadmapModal = changingRoadmapId && (
- setChangingRoadmapId('')}
- resourceId={changingRoadmapId}
- resourceType={'roadmap'}
- teamId={team?._id!}
- setTeamResourceConfig={setTeamResources}
- defaultRemovedItems={
- defaultRoadmaps.find((c) => c.resourceId === changingRoadmapId)
- ?.removed || []
- }
- />
- );
-
- const shareSettingsModal = selectedResource && (
- {
- setTeamResources((prev) => {
- return prev.map((c) => {
- if (c.resourceId !== selectedResource.resourceId) {
- return c;
- }
-
- return {
- ...c,
- ...shareSettings,
- };
- });
- });
- }}
- onClose={() => setSelectedResource(null)}
- />
- );
-
- return (
-
- {pickRoadmapOptionModal}
- {addRoadmapModal}
- {createRoadmapModal}
- {customizeRoadmapModal}
- {shareSettingsModal}
- {confirmationContentIdModal}
-
- {canManageCurrentTeam && placeholderRoadmaps.length > 0 && (
-
-
-
- Placeholder Roadmaps
-
- Total {placeholderRoadmaps.length} roadmap(s)
-
-
-
-
- {placeholderRoadmaps.map(
- (resourceConfig: TeamResourceConfig[0]) => {
- return (
-
-
-
- {resourceConfig.title}
-
-
- Placeholder roadmap
-
-
-
- {canManageCurrentTeam && (
-
-
{
- setSelectedResource(resourceConfig);
- }}
- onDelete={() => {
- if (
- confirm(
- 'Are you sure you want to remove this roadmap?',
- )
- ) {
- onRemove(resourceConfig.resourceId).finally(
- () => {},
- );
- }
- }}
- />
-
-
- Create Roadmap
-
-
- )}
-
- );
- },
- )}
-
-
- )}
-
- {customRoadmaps.length > 0 && (
-
-
-
- Custom Roadmaps
-
- Total {customRoadmaps.length} roadmap(s)
-
-
-
-
- {customRoadmaps.map((resourceConfig: TeamResourceConfig[0]) => {
- const editorLink = `${import.meta.env.PUBLIC_EDITOR_APP_URL}/${
- resourceConfig.resourceId
- }`;
-
- return (
-
-
-
- {resourceConfig.title}
-
-
-
- ·
-
- {resourceConfig.topics} topic
-
-
-
- {canManageCurrentTeam && (
-
{
- setSelectedResource(resourceConfig);
- }}
- onCustomize={() => {
- window.open(editorLink, '_blank');
- }}
- onDelete={() => {
- if (
- confirm(
- 'Are you sure you want to remove this roadmap?',
- )
- ) {
- onRemove(resourceConfig.resourceId).finally(
- () => {},
- );
- }
- }}
- />
- )}
-
-
-
- Visit
-
- {canManageCurrentTeam && (
-
-
- Edit
-
- )}
-
-
- );
- })}
-
-
- )}
-
- {defaultRoadmaps.length > 0 && (
-
-
-
- Default Roadmaps
-
- Total {defaultRoadmaps.length} roadmap(s)
-
-
-
-
- {defaultRoadmaps.map((resourceConfig: TeamResourceConfig[0]) => {
- return (
-
-
-
- {resourceConfig.title}
-
-
- {resourceConfig?.removed?.length > 0 && (
- <>
-
- {resourceConfig.removed.length} topics removed
- >
- )}
-
- {!resourceConfig?.removed?.length && (
- <>
-
- No changes made
- >
- )}
-
-
-
- {canManageCurrentTeam && (
-
{
- setChangingRoadmapId(resourceConfig.resourceId);
- }}
- onDelete={() => {
- if (
- confirm(
- 'Are you sure you want to remove this roadmap?',
- )
- ) {
- onRemove(resourceConfig.resourceId).finally(
- () => {},
- );
- }
- }}
- />
- )}
-
-
-
- Visit
-
-
-
- );
- })}
-
-
- )}
-
- {canManageCurrentTeam && (
-
- setIsPickingOptions(true)}
- >
- + Add new Roadmap
-
-
- )}
-
- );
-}
-
-type VisibilityLabelProps = {
- visibility: AllowedRoadmapVisibility;
- sharedTeamMemberIds?: string[];
- sharedFriendIds?: string[];
-};
-
-const visibilityDetails: Record<
- AllowedRoadmapVisibility,
- {
- icon: LucideIcon;
- label: string;
- }
-> = {
- public: {
- icon: Globe,
- label: 'Public',
- },
- me: {
- icon: LockIcon,
- label: 'Only me',
- },
- team: {
- icon: Users,
- label: 'Team Member(s)',
- },
- friends: {
- icon: Users,
- label: 'Friend(s)',
- },
-} as const;
-
-export function VisibilityBadge(props: VisibilityLabelProps) {
- const { visibility, sharedTeamMemberIds = [], sharedFriendIds = [] } = props;
-
- const { label, icon: Icon } = visibilityDetails[visibility];
-
- return (
-
-
-
- {visibility === 'team' && sharedTeamMemberIds?.length > 0 && (
- {sharedTeamMemberIds.length}
- )}
- {visibility === 'friends' && sharedFriendIds?.length > 0 && (
- {sharedFriendIds.length}
- )}
- {label}
-
-
- );
-}
diff --git a/src/components/TeamSettings/UpdateTeamForm.tsx b/src/components/TeamSettings/UpdateTeamForm.tsx
deleted file mode 100644
index 859abcca1..000000000
--- a/src/components/TeamSettings/UpdateTeamForm.tsx
+++ /dev/null
@@ -1,321 +0,0 @@
-import { type FormEvent, useEffect, useState } from 'react';
-import { httpGet, httpPut } from '../../lib/http';
-import { Spinner } from '../ReactIcons/Spinner';
-import UploadProfilePicture from '../UpdateProfile/UploadProfilePicture';
-import type { TeamDocument } from '../CreateTeam/CreateTeamForm';
-import { pageProgressMessage } from '../../stores/page';
-import { useTeamId } from '../../hooks/use-team-id';
-import { DeleteTeamPopup } from '../DeleteTeamPopup';
-import { $isCurrentTeamAdmin } from '../../stores/team';
-import { useStore } from '@nanostores/react';
-import { useToast } from '../../hooks/use-toast';
-export function UpdateTeamForm() {
- const [isLoading, setIsLoading] = useState(false);
- const [isDeleting, setIsDeleting] = useState(false);
-
- const isCurrentTeamAdmin = useStore($isCurrentTeamAdmin);
-
- const toast = useToast();
-
- const [name, setName] = useState('');
- const [avatar, setAvatar] = useState('');
- const [website, setWebsite] = useState('');
- const [linkedIn, setLinkedIn] = useState('');
- const [gitHub, setGitHub] = useState('');
- const [teamType, setTeamType] = useState('');
- const [teamSize, setTeamSize] = useState('');
- const [personalProgressOnly, setPersonalProgressOnly] = useState(false);
- const validTeamSizes = [
- '0-1',
- '2-10',
- '11-50',
- '51-200',
- '201-500',
- '501-1000',
- '1000+',
- ];
- const [isDisabled, setIsDisabled] = useState(false);
- const { teamId } = useTeamId();
-
- useEffect(() => {
- setIsDisabled(!isCurrentTeamAdmin);
- }, [isCurrentTeamAdmin]);
-
- const handleSubmit = async (e: FormEvent) => {
- e.preventDefault();
- setIsLoading(true);
- if (!name || !teamType) {
- setIsLoading(false);
- return;
- }
-
- const { response, error } = await httpPut(
- `${import.meta.env.PUBLIC_API_URL}/v1-update-team/${teamId}`,
- {
- name,
- website,
- type: teamType,
- gitHubUrl: gitHub || undefined,
- personalProgressOnly,
- ...(teamType === 'company' && {
- teamSize,
- linkedInUrl: linkedIn || undefined,
- }),
- },
- );
-
- if (error) {
- setIsLoading(false);
- toast.error(error.message || 'Something went wrong');
- return;
- }
-
- if (response) {
- await loadTeam();
- setIsLoading(false);
- toast.success('Team updated successfully');
- }
- };
-
- async function loadTeam() {
- const { response, error } = await httpGet(
- `${import.meta.env.PUBLIC_API_URL}/v1-get-team/${teamId}`,
- );
- if (error || !response) {
- console.log(error);
- return;
- }
-
- setName(response.name);
- setAvatar(response.avatar || '');
- setWebsite(response?.links?.website || '');
- setLinkedIn(response?.links?.linkedIn || '');
- setGitHub(response?.links?.github || '');
- setTeamType(response.type);
- setPersonalProgressOnly(response.personalProgressOnly ?? false);
- if (response.teamSize) {
- setTeamSize(response.teamSize);
- }
- }
-
- useEffect(() => {
- if (!teamId) {
- return;
- }
- loadTeam().finally(() => {
- pageProgressMessage.set('');
- });
- }, [teamId]);
-
- return (
-
-
-
-
- {!isCurrentTeamAdmin && (
-
- Only team admins can update team information.
-
- )}
-
- {isCurrentTeamAdmin && (
- <>
-
- {isDeleting && (
-
{
- setIsDeleting(false);
- }}
- />
- )}
- Delete Team
-
- Permanently delete this team and all of its resources.
-
-
- setIsDeleting(true)}
- data-popup="delete-team-popup"
- className="font-regular mt-4 w-full rounded-lg bg-red-600 py-2 text-base text-white outline-hidden focus:ring-2 focus:ring-red-500 focus:ring-offset-1"
- >
- Delete Team
-
- >
- )}
-
- );
-}
diff --git a/src/components/TeamVersions/TeamVersions.tsx b/src/components/TeamVersions/TeamVersions.tsx
deleted file mode 100644
index f67ffff59..000000000
--- a/src/components/TeamVersions/TeamVersions.tsx
+++ /dev/null
@@ -1,230 +0,0 @@
-import { useState, useEffect, useRef } from 'react';
-import type { TeamDocument } from '../CreateTeam/CreateTeamForm';
-import type { TeamResourceConfig } from '../CreateTeam/RoadmapSelector';
-import { httpGet } from '../../lib/http';
-// import DropdownIcon from '../../icons/dropdown.svg';
-import {
- clearResourceProgress,
- refreshProgressCounters,
- renderTopicProgress,
-} from '../../lib/resource-progress';
-import { renderResourceProgress } from '../../lib/resource-progress';
-import { deleteUrlParam, getUrlParams, setUrlParams } from '../../lib/browser';
-import { useOutsideClick } from '../../hooks/use-outside-click';
-import { useKeydown } from '../../hooks/use-keydown';
-import { isLoggedIn } from '../../lib/jwt';
-import { useAuth } from '../../hooks/use-auth';
-import { useToast } from '../../hooks/use-toast';
-import { DropdownIcon } from '../ReactIcons/DropdownIcon';
-
-type TeamVersionsProps = {
- resourceId: string;
- resourceType: 'roadmap' | 'best-practice';
-};
-
-type TeamVersionsResponse = {
- team: TeamDocument;
- config: TeamResourceConfig[0];
-}[];
-
-export function TeamVersions(props: TeamVersionsProps) {
- const { t: teamId } = getUrlParams();
- if (!isLoggedIn()) {
- return;
- }
-
- const { resourceId, resourceType } = props;
- const user = useAuth();
- const toast = useToast();
- const teamDropdownRef = useRef(null);
-
- const [isPreparing, setIsPreparing] = useState(true);
- const [isDropdownOpen, setIsDropdownOpen] = useState(false);
- const [containerOpacity, setContainerOpacity] = useState(0);
- const [teamVersions, setTeamVersions] = useState([]);
- const [selectedTeamVersion, setSelectedTeamVersion] = useState<
- TeamVersionsResponse[0] | null
- >(null);
-
- let shouldShowAvatar: boolean;
- const selectedAvatar = selectedTeamVersion
- ? selectedTeamVersion.team.avatar
- : user?.avatar;
- const selectedLabel = selectedTeamVersion
- ? selectedTeamVersion.team.name
- : user?.name;
-
- // Show avatar if team has one, or if user has one otherwise use first letter of name
- if (selectedTeamVersion?.team.avatar) {
- shouldShowAvatar = true;
- } else {
- shouldShowAvatar = !!(!selectedTeamVersion && user?.avatar);
- }
-
- useOutsideClick(teamDropdownRef, () => {
- setIsDropdownOpen(false);
- });
-
- useKeydown('Escape', () => {
- setIsDropdownOpen(false);
- });
-
- async function loadTeamVersions() {
- const { response, error } = await httpGet(
- `${
- import.meta.env.PUBLIC_API_URL
- }/v1-get-team-versions?${new URLSearchParams({
- resourceId,
- resourceType,
- })}`,
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Failed to load team versions.');
- return;
- }
-
- setTeamVersions(response);
- if (teamId) {
- const foundVersion = response.find((v) => v.team._id === teamId) || null;
- setSelectedTeamVersion(foundVersion);
- }
-
- setTimeout(() => {
- setIsPreparing(false);
-
- setTimeout(() => {
- setContainerOpacity(100);
- }, 50);
- }, 0);
- }
-
- useEffect(() => {
- loadTeamVersions().finally(() => {
- //
- });
- }, []);
-
- useEffect(() => {
- if (!selectedTeamVersion) {
- return;
- }
-
- clearResourceProgress();
-
- // teams have customizations. Assigning #customized-roadmap to roadmapSvgWrap
- // makes those customizations visible and removes extra boxes
- const roadmapSvgWrap: HTMLElement =
- document.getElementById('resource-svg-wrap')?.parentElement ||
- document.createElement('div');
-
- if (!selectedTeamVersion) {
- deleteUrlParam('t');
- renderResourceProgress(resourceType, resourceId).then();
-
- roadmapSvgWrap.id = '';
- } else {
- setUrlParams({ t: selectedTeamVersion.team._id! });
-
- renderResourceProgress(resourceType, resourceId).then(() => {
- selectedTeamVersion.config?.removed?.forEach((topic) => {
- renderTopicProgress(topic, 'removed');
- });
- refreshProgressCounters();
- roadmapSvgWrap.id = 'customized-roadmap';
- });
- }
- }, [selectedTeamVersion]);
-
- if (isPreparing) {
- return null;
- }
-
- if (!teamVersions.length) {
- return null;
- }
-
- return (
-
-
setIsDropdownOpen(!isDropdownOpen)}
- >
-
-
- {selectedTeamVersion?.team.name || 'Team Versions'}
-
-
-
-
- {shouldShowAvatar ? (
-
- ) : (
-
- {selectedLabel?.charAt(0).toUpperCase()}
-
- )}
-
-
- {isDropdownOpen && (
- <>
-
-
-
{
- setSelectedTeamVersion(null);
- setIsDropdownOpen(false);
- }}
- >
-
- Personal
-
-
- {teamVersions.map((team: TeamVersionsResponse[0]) => {
- const isSelectedTeam =
- selectedTeamVersion?.team._id === team.team._id;
-
- return (
-
{
- setSelectedTeamVersion(team);
- setIsDropdownOpen(false);
- }}
- >
-
- {team.team.name}
-
-
- );
- })}
-
- >
- )}
-
- );
-}
diff --git a/src/components/TeamsList.tsx b/src/components/TeamsList.tsx
index 7be66f76d..ca74d83c8 100644
--- a/src/components/TeamsList.tsx
+++ b/src/components/TeamsList.tsx
@@ -50,7 +50,7 @@ export function TeamsList() {
? `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${
user?.avatar
}`
- : '/images/default-avatar.png'
+ : '/img/default-avatar.png'
}
alt={user?.name || ''}
className="h-6 w-6 rounded-full"
@@ -81,7 +81,7 @@ export function TeamsList() {
? `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${
team.avatar
}`
- : '/images/default-avatar.png'
+ : '/img/default-avatar.png'
}
alt={team.name || ''}
className="h-6 w-6 rounded-full"
diff --git a/src/components/ThankYou/ThankYouPage.tsx b/src/components/ThankYou/ThankYouPage.tsx
index 532316ba6..a05ab783b 100644
--- a/src/components/ThankYou/ThankYouPage.tsx
+++ b/src/components/ThankYou/ThankYouPage.tsx
@@ -58,7 +58,7 @@ export function ThankYouPage() {
diff --git a/src/components/TopNavDropdowns/AIDropdownMenu.tsx b/src/components/TopNavDropdowns/AIDropdownMenu.tsx
index 98ffe11b1..2d64894c7 100644
--- a/src/components/TopNavDropdowns/AIDropdownMenu.tsx
+++ b/src/components/TopNavDropdowns/AIDropdownMenu.tsx
@@ -1,5 +1,5 @@
import { useStore } from '@nanostores/react';
-import { ChevronDown, Map, MessageCircle, Plus } from 'lucide-react';
+import { ChevronDown, Map, MessageCircle, Plus, Swords } from 'lucide-react';
import { useEffect } from 'react';
import {
aiDropdownOpen,
@@ -15,6 +15,12 @@ const links = [
description: 'Learn something new with AI',
Icon: Plus,
},
+ {
+ link: '/ai/quiz',
+ label: 'Test my Skills',
+ description: 'Test your skills with AI',
+ Icon: Swords,
+ },
{
link: '/ai/chat',
label: 'Ask AI Tutor',
@@ -43,7 +49,7 @@ export function AIDropdownMenu() {
+
AI Tutor
diff --git a/src/components/TopNavDropdowns/UpgradeProButton.tsx b/src/components/TopNavDropdowns/UpgradeProButton.tsx
new file mode 100644
index 000000000..b1c5b7b7c
--- /dev/null
+++ b/src/components/TopNavDropdowns/UpgradeProButton.tsx
@@ -0,0 +1,20 @@
+import { Zap } from 'lucide-react';
+import { useIsPaidUser } from '../../queries/billing';
+import { cn } from '../../lib/classname';
+
+export function UpgradeProButton() {
+ const { isPaidUser, isLoading } = useIsPaidUser();
+
+ return (
+
+
+ Upgrade to Pro
+
+ );
+}
diff --git a/src/components/TopicDetail/PredefinedActions.tsx b/src/components/TopicDetail/PredefinedActions.tsx
index b1f90b930..78d9b3537 100644
--- a/src/components/TopicDetail/PredefinedActions.tsx
+++ b/src/components/TopicDetail/PredefinedActions.tsx
@@ -27,7 +27,7 @@ export const actions: PredefinedActionType[] = [
{
icon: NotebookPenIcon,
label: 'Explain the topic',
- prompt: 'Explain this topic in detail and include examples',
+ prompt: 'Explain this topic in detail',
},
{
icon: ListIcon,
diff --git a/src/components/TopicDetail/TopicDetail.tsx b/src/components/TopicDetail/TopicDetail.tsx
index c2e8745c8..3cead482e 100644
--- a/src/components/TopicDetail/TopicDetail.tsx
+++ b/src/components/TopicDetail/TopicDetail.tsx
@@ -26,8 +26,7 @@ import { getUrlParams, parseUrl } from '../../lib/browser';
import { Spinner } from '../ReactIcons/Spinner';
import { GitHubIcon } from '../ReactIcons/GitHubIcon.tsx';
import {
- resourceTitleFromId,
- type AllowedRoadmapRenderer,
+ type AllowedRoadmapRenderer
} from '../../lib/roadmap.ts';
import { lockBodyScroll } from '../../lib/dom.ts';
import { TopicDetailLink } from './TopicDetailLink.tsx';
@@ -660,26 +659,7 @@ export function TopicDetail(props: TopicDetailProps) {
className="hidden items-center justify-center rounded-md px-2 py-2 text-sm transition-all hover:bg-gray-200 sm:flex"
>
- Help us Improve this Content
-
-
- {
- window.fireEvent({
- category: 'PartnerClick',
- action: 'TNS Redirect',
- label: 'Roadmap Topic / TNS Link',
- });
- }}
- >
- Partner
- Visit{' '}
-
- TheNewStack.io
- {' '}
- for {resourceTitleFromId(resourceId)} news
+ Help us add resources to this topic
)}
diff --git a/src/components/TopicDetail/TopicDetailAI.tsx b/src/components/TopicDetail/TopicDetailAI.tsx
index e34ef8193..a7898af9e 100644
--- a/src/components/TopicDetail/TopicDetailAI.tsx
+++ b/src/components/TopicDetail/TopicDetailAI.tsx
@@ -20,7 +20,7 @@ import { markdownToHtmlWithHighlighting } from '../../lib/markdown';
import { getPercentage } from '../../lib/number';
import { showLoginPopup } from '../../lib/popup';
import type { ResourceType } from '../../lib/resource-progress';
-import { getAiCourseLimitOptions } from '../../queries/ai-course';
+import { aiLimitOptions } from '../../queries/ai-course';
import { billingDetailsOptions } from '../../queries/billing';
import { roadmapTreeMappingOptions } from '../../queries/roadmap-tree';
import { queryClient } from '../../stores/query-client';
@@ -76,7 +76,7 @@ export function TopicDetailAI(props: TopicDetailAIProps) {
const [streamedMessage, setStreamedMessage] = useState('');
const [showAILimitsPopup, setShowAILimitsPopup] = useState(false);
const { data: tokenUsage, isLoading } = useQuery(
- getAiCourseLimitOptions(),
+ aiLimitOptions(),
queryClient,
);
@@ -170,7 +170,7 @@ export function TopicDetailAI(props: TopicDetailAIProps) {
window.location.reload();
}
- queryClient.invalidateQueries(getAiCourseLimitOptions());
+ queryClient.invalidateQueries(aiLimitOptions());
return;
}
@@ -206,7 +206,7 @@ export function TopicDetailAI(props: TopicDetailAIProps) {
setAiChatHistory(newMessages);
});
- queryClient.invalidateQueries(getAiCourseLimitOptions());
+ queryClient.invalidateQueries(aiLimitOptions());
scrollToBottom();
},
});
@@ -290,21 +290,16 @@ export function TopicDetailAI(props: TopicDetailAIProps) {
- {nodeTextParts.slice(1).map((text, index) => {
- // -2 because we are removing roadmap title from the list
- const isLast = index === nodeTextParts.length - 2;
-
+ {nodeTextParts.slice(-2).map((text, index) => {
return (
<>
{text}
- {!isLast && (
-
- )}
+
>
);
})}
diff --git a/src/components/TopicSearch/TopicSearch.astro b/src/components/TopicSearch/TopicSearch.astro
deleted file mode 100644
index 37d879989..000000000
--- a/src/components/TopicSearch/TopicSearch.astro
+++ /dev/null
@@ -1,19 +0,0 @@
----
-import Icon from '../AstroIcon.astro';
----
-
-
-
-
-
-
-
-
-
-
diff --git a/src/components/TopicSearch/topics.js b/src/components/TopicSearch/topics.js
deleted file mode 100644
index 26b31edee..000000000
--- a/src/components/TopicSearch/topics.js
+++ /dev/null
@@ -1,46 +0,0 @@
-class Topics {
- constructor() {
- this.topicSearchId = 'search-topic-input';
-
- this.onDOMLoaded = this.onDOMLoaded.bind(this);
- this.init = this.init.bind(this);
- this.filterTopicNodes = this.filterTopicNodes.bind(this);
- }
-
- get topicSearchEl() {
- return document.getElementById(this.topicSearchId);
- }
-
- filterTopicNodes(e) {
- const value = e.target.value.trim().toLowerCase();
- if (!value) {
- document
- .querySelectorAll(`[data-topic]`)
- .forEach((item) => item.classList.remove('hidden'));
- return;
- }
-
- document
- .querySelectorAll(`[data-topic]`)
- .forEach((item) => item.classList.add('hidden'));
-
- document
- .querySelectorAll(`[data-topic*="${value}"]`)
- .forEach((item) => item.classList.remove('hidden'));
- }
-
- onDOMLoaded() {
- if (!this.topicSearchEl) {
- return;
- }
-
- this.topicSearchEl.addEventListener('keyup', this.filterTopicNodes);
- }
-
- init() {
- window.addEventListener('DOMContentLoaded', this.onDOMLoaded);
- }
-}
-
-const topicRef = new Topics();
-topicRef.init();
diff --git a/src/components/UpdateEmail/UpdateEmailForm.tsx b/src/components/UpdateEmail/UpdateEmailForm.tsx
deleted file mode 100644
index 23a2d394e..000000000
--- a/src/components/UpdateEmail/UpdateEmailForm.tsx
+++ /dev/null
@@ -1,245 +0,0 @@
-import { type FormEvent, useState } from 'react';
-import { httpPatch } from '../../lib/http';
-import { pageProgressMessage } from '../../stores/page';
-import { useToast } from '../../hooks/use-toast';
-import { cn } from '../../lib/classname';
-import { ArrowUpRight, X } from 'lucide-react';
-
-type UpdateEmailFormProps = {
- authProvider: string;
- currentEmail: string;
- newEmail?: string;
- onSendVerificationCode?: (newEmail: string) => void;
- onVerificationCancel?: () => void;
-};
-
-export function UpdateEmailForm(props: UpdateEmailFormProps) {
- const {
- authProvider,
- currentEmail,
- newEmail: defaultNewEmail = '',
- onSendVerificationCode,
- onVerificationCancel,
- } = props;
- const toast = useToast();
-
- const [isLoading, setIsLoading] = useState(false);
- const [isSubmitted, setIsSubmitted] = useState(defaultNewEmail !== '');
- const [newEmail, setNewEmail] = useState(defaultNewEmail);
- const [isResendDone, setIsResendDone] = useState(false);
-
- const handleSentVerificationCode = async (e: FormEvent) => {
- e.preventDefault();
- if (!newEmail || !newEmail.includes('@') || isSubmitted) {
- return;
- }
-
- setIsLoading(true);
- pageProgressMessage.set('Sending verification code');
- const { response, error } = await httpPatch(
- `${import.meta.env.PUBLIC_API_URL}/v1-update-user-email`,
- { email: newEmail },
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Something went wrong');
- setIsLoading(false);
- pageProgressMessage.set('');
-
- return;
- }
-
- pageProgressMessage.set('');
- setIsLoading(false);
- setIsSubmitted(true);
- onSendVerificationCode?.(newEmail);
- };
-
- const handleResendVerificationCode = async () => {
- if (isResendDone) {
- toast.error('You have already resent the verification code');
- return;
- }
-
- setIsLoading(true);
- pageProgressMessage.set('Resending verification code');
- const { response, error } = await httpPatch(
- `${import.meta.env.PUBLIC_API_URL}/v1-resend-email-verification-code`,
- { email: newEmail },
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Something went wrong');
- setIsLoading(false);
- pageProgressMessage.set('');
-
- return;
- }
-
- toast.success('Verification code has been resent');
- pageProgressMessage.set('');
- setIsResendDone(true);
- setIsLoading(false);
- };
-
- const handleCancelEmailVerification = async () => {
- setIsLoading(true);
- pageProgressMessage.set('Cancelling email verification');
- const { response, error } = await httpPatch(
- `${import.meta.env.PUBLIC_API_URL}/v1-cancel-email-verification`,
- {},
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Something went wrong');
- setIsLoading(false);
- pageProgressMessage.set('');
-
- return;
- }
-
- pageProgressMessage.set('');
- onVerificationCancel?.();
- setIsSubmitted(false);
- setNewEmail('');
- setIsLoading(false);
- };
-
- if (authProvider && authProvider !== 'email') {
- return (
-
-
Update Email
-
- You have used {authProvider} when signing up. Please set your password
- first.
-
-
-
-
- Current Email
-
-
-
-
- Please set your password first to update your email.
-
-
- );
- }
-
- return (
- <>
-
-
Update Email
-
- Use the form below to update your email.
-
-
-
-
- >
- );
-}
diff --git a/src/components/UpdatePassword/UpdatePasswordForm.tsx b/src/components/UpdatePassword/UpdatePasswordForm.tsx
deleted file mode 100644
index 94e99bcc5..000000000
--- a/src/components/UpdatePassword/UpdatePasswordForm.tsx
+++ /dev/null
@@ -1,149 +0,0 @@
-import { type FormEvent, useState } from 'react';
-import { httpPost } from '../../lib/http';
-import { useToast } from '../../hooks/use-toast';
-
-type UpdatePasswordFormProps = {
- authProvider: string;
-};
-
-export default function UpdatePasswordForm(props: UpdatePasswordFormProps) {
- const { authProvider } = props;
-
- const toast = useToast();
-
- const [currentPassword, setCurrentPassword] = useState('');
- const [newPassword, setNewPassword] = useState('');
- const [newPasswordConfirmation, setNewPasswordConfirmation] = useState('');
-
- const [isLoading, setIsLoading] = useState(false);
-
- const handleSubmit = async (e: FormEvent) => {
- e.preventDefault();
- setIsLoading(true);
-
- if (newPassword !== newPasswordConfirmation) {
- toast.error('Passwords do not match');
- setIsLoading(false);
-
- return;
- }
-
- const { response, error } = await httpPost(
- `${import.meta.env.PUBLIC_API_URL}/v1-update-password`,
- {
- oldPassword: authProvider === 'email' ? currentPassword : 'social-auth',
- password: newPassword,
- confirmPassword: newPasswordConfirmation,
- },
- );
-
- if (error || !response) {
- toast.error(error?.message || 'Something went wrong');
- setIsLoading(false);
-
- return;
- }
-
- setCurrentPassword('');
- setNewPassword('');
- setNewPasswordConfirmation('');
- toast.success('Password updated successfully');
- setIsLoading(false);
- setTimeout(() => {
- window.location.reload();
- }, 1000);
- };
-
- return (
-
- );
-}
diff --git a/src/components/UpdateProfile/ProfileUsername.tsx b/src/components/UpdateProfile/ProfileUsername.tsx
deleted file mode 100644
index aeb9b9bc4..000000000
--- a/src/components/UpdateProfile/ProfileUsername.tsx
+++ /dev/null
@@ -1,155 +0,0 @@
-import { useEffect, useState } from 'react';
-import type { AllowedProfileVisibility } from '../../api/user';
-import { httpPost } from '../../lib/http';
-import { useToast } from '../../hooks/use-toast';
-import { CheckIcon, Loader2, X } from 'lucide-react';
-import { useDebounceValue } from '../../hooks/use-debounce.ts';
-
-type ProfileUsernameProps = {
- username: string;
- setUsername: (username: string) => void;
- profileVisibility: AllowedProfileVisibility;
- currentUsername?: string;
-};
-
-export function ProfileUsername(props: ProfileUsernameProps) {
- const { username, setUsername, profileVisibility, currentUsername } = props;
-
- const toast = useToast();
- const [isLoading, setIsLoading] = useState(false);
- const [isUnique, setIsUnique] = useState(null);
- const debouncedUsername = useDebounceValue(username, 500);
-
- useEffect(() => {
- checkIsUnique(debouncedUsername).then();
- }, [debouncedUsername]);
-
- const checkIsUnique = async (username: string) => {
- if (isLoading || !username) {
- return;
- }
-
- if (username.length < 3) {
- setIsUnique(false);
- return;
- }
-
- if (currentUsername && username === currentUsername && isUnique !== false) {
- setIsUnique(true);
- return;
- }
-
- setIsLoading(true);
- const { response, error } = await httpPost<{
- isUnique: boolean;
- }>(`${import.meta.env.PUBLIC_API_URL}/v1-check-is-unique-username`, {
- username,
- });
-
- if (error || !response) {
- setIsUnique(null);
- setIsLoading(false);
- toast.error(error?.message || 'Something went wrong. Please try again.');
- return;
- }
-
- setIsUnique(response.isUnique);
- setIsLoading(false);
- };
- const USERNAME_REGEX = /^[a-zA-Z0-9]*$/;
- const isUserNameValid = (value: string) =>
- USERNAME_REGEX.test(value) && value.length <= 20;
-
- return (
-
-
- Profile URL
- {!isLoading && (
-
- {currentUsername &&
- (currentUsername === username || !username || !isUnique) && (
-
- Current URL{' '}
-
- roadmap.sh/u/{currentUsername}
-
-
- )}
- {currentUsername !== username && username && isUnique && (
-
- URL after update{' '}
-
- roadmap.sh/u/{username}
-
-
- )}
-
- )}
-
-
-
- roadmap.sh/u/
-
-
-
- {
- // only allow letters, numbers
- const keyCode = e.key;
- if (
- !isUserNameValid(keyCode) &&
- !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight'].includes(
- keyCode,
- )
- ) {
- e.preventDefault();
- }
- }}
- onInput={(e) => {
- const value = (e.target as HTMLInputElement).value?.trim();
- if (!isUserNameValid(value)) {
- return;
- }
-
- setUsername((e.target as HTMLInputElement).value.toLowerCase());
- }}
- required={profileVisibility === 'public'}
- />
-
- {username && (
-
- {isLoading ? (
-
- ) : isUnique === false ? (
-
- ) : isUnique === true ? (
-
- ) : null}
-
- )}
-
-
-
- );
-}
diff --git a/src/components/UpdateProfile/SkillProfileAlert.tsx b/src/components/UpdateProfile/SkillProfileAlert.tsx
deleted file mode 100644
index a5fd1293d..000000000
--- a/src/components/UpdateProfile/SkillProfileAlert.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { CheckCircle, FileBadge } from 'lucide-react';
-
-const ideas = [
- 'Add a link to your profile in your social media bio',
- 'Include your profile link in your resume to showcase your skills',
- 'Add a link to your profile in your email signature',
- 'Showcase your skills in your GitHub profile',
- 'Share your profile with potential employers',
-];
-
-export function SkillProfileAlert() {
- return (
-
-
-
-
- Announcing Skill Profiles!{' '}
-
-
- Create your skill profile to showcase your skills or learning progress.
- Here are some of the ways you can use your skill profile:
-
-
-
- {ideas.map((idea) => (
-
-
- {idea}
-
- ))}
-
-
-
- Make sure to mark your expertise{' '}
-
- in the roadmaps.
-
-
-
- );
-}
diff --git a/src/components/UpdateProfile/UpdateProfileForm.tsx b/src/components/UpdateProfile/UpdateProfileForm.tsx
deleted file mode 100644
index 60066f996..000000000
--- a/src/components/UpdateProfile/UpdateProfileForm.tsx
+++ /dev/null
@@ -1,154 +0,0 @@
-import { type FormEvent, useEffect, useState } from 'react';
-import { httpGet, httpPost } from '../../lib/http';
-import { pageProgressMessage } from '../../stores/page';
-import UploadProfilePicture from './UploadProfilePicture';
-
-export function UpdateProfileForm() {
- const [name, setName] = useState('');
- const [avatar, setAvatar] = useState('');
- const [email, setEmail] = useState('');
- const [username, setUsername] = useState('');
- const [isLoading, setIsLoading] = useState(false);
-
- const [error, setError] = useState('');
- const [success, setSuccess] = useState('');
-
- const handleSubmit = async (e: FormEvent) => {
- e.preventDefault();
- setIsLoading(true);
- setError('');
- setSuccess('');
-
- const { response, error } = await httpPost(
- `${import.meta.env.PUBLIC_API_URL}/v1-update-profile`,
- {
- name,
- },
- );
-
- if (error || !response) {
- setIsLoading(false);
- setError(error?.message || 'Something went wrong');
-
- return;
- }
-
- await loadProfile();
- setSuccess('Profile updated successfully');
- };
-
- const loadProfile = async () => {
- setIsLoading(true);
-
- const { error, response } = await httpGet(
- `${import.meta.env.PUBLIC_API_URL}/v1-me`,
- );
-
- if (error || !response) {
- setIsLoading(false);
- setError(error?.message || 'Something went wrong');
-
- return;
- }
-
- const { name, email, avatar, username } = response;
-
- setName(name);
- setEmail(email);
- setUsername(username);
- setAvatar(avatar || '');
-
- setIsLoading(false);
- };
-
- // Make a request to the backend to fill in the form with the current values
- useEffect(() => {
- loadProfile().finally(() => {
- pageProgressMessage.set('');
- });
- }, []);
-
- return (
-
-
-
Basic Information
-
- Update and set up your public profile below.
-
-
-
-
-
- );
-}
diff --git a/src/components/UpdateProfile/UpdatePublicProfileForm.tsx b/src/components/UpdateProfile/UpdatePublicProfileForm.tsx
deleted file mode 100644
index 465b15cde..000000000
--- a/src/components/UpdateProfile/UpdatePublicProfileForm.tsx
+++ /dev/null
@@ -1,639 +0,0 @@
-import { type FormEvent, useEffect, useState } from 'react';
-import { httpGet, httpPatch } from '../../lib/http';
-import { pageProgressMessage } from '../../stores/page';
-import type {
- AllowedCustomRoadmapVisibility,
- AllowedProfileVisibility,
- AllowedRoadmapVisibility,
- UserDocument,
-} from '../../api/user';
-import { SelectionButton } from '../RoadCard/SelectionButton';
-import {
- ArrowUpRight,
- Check,
- CheckCircle,
- Copy,
- Eye,
- EyeOff,
- FileBadge,
- Trophy,
-} from 'lucide-react';
-import { useToast } from '../../hooks/use-toast';
-import { CreateRoadmapModal } from '../CustomRoadmap/CreateRoadmap/CreateRoadmapModal.tsx';
-import { VisibilityDropdown } from './VisibilityDropdown.tsx';
-import { ProfileUsername } from './ProfileUsername.tsx';
-import UploadProfilePicture from './UploadProfilePicture.tsx';
-import { SkillProfileAlert } from './SkillProfileAlert.tsx';
-import { useCopyText } from '../../hooks/use-copy-text.ts';
-import { cn } from '../../lib/classname.ts';
-
-type RoadmapType = {
- id: string;
- title: string;
- isCustomResource: boolean;
-};
-
-type GetProfileSettingsResponse = Pick<
- UserDocument,
- 'username' | 'profileVisibility' | 'publicConfig' | 'links'
->;
-
-export function UpdatePublicProfileForm() {
- const [profileVisibility, setProfileVisibility] =
- useState('public');
-
- const toast = useToast();
-
- const [isCreatingRoadmap, setIsCreatingRoadmap] = useState(false);
- const [publicProfileUrl, setPublicProfileUrl] = useState('');
- const [isAvailableForHire, setIsAvailableForHire] = useState(false);
- const [isEmailVisible, setIsEmailVisible] = useState(true);
- const [headline, setHeadline] = useState('');
- const [username, setUsername] = useState('');
- const [email, setEmail] = useState('');
- const [roadmapVisibility, setRoadmapVisibility] =
- useState('all');
- const [customRoadmapVisibility, setCustomRoadmapVisibility] =
- useState('all');
- const [roadmaps, setRoadmaps] = useState([]);
- const [customRoadmaps, setCustomRoadmaps] = useState([]);
-
- const [currentUsername, setCurrentUsername] = useState('');
- const [name, setName] = useState('');
-
- const [avatar, setAvatar] = useState('');
- const [github, setGithub] = useState('');
- const [twitter, setTwitter] = useState('');
- const [linkedin, setLinkedin] = useState('');
- const [dailydev, setDailydev] = useState('');
- const [website, setWebsite] = useState('');
-
- const [profileRoadmaps, setProfileRoadmaps] = useState([]);
-
- const [isLoading, setIsLoading] = useState(false);
- const [isProfileUpdated, setIsProfileUpdated] = useState(false);
-
- const { isCopied, copyText } = useCopyText();
-
- const handleSubmit = async (e: FormEvent) => {
- e.preventDefault();
- setIsLoading(true);
-
- const { response, error } = await httpPatch(
- `${import.meta.env.PUBLIC_API_URL}/v1-update-public-profile-config`,
- {
- isAvailableForHire,
- isEmailVisible,
- profileVisibility,
- headline,
- username,
- roadmapVisibility,
- customRoadmapVisibility,
- roadmaps,
- customRoadmaps,
- github,
- twitter,
- linkedin,
- website,
- name,
- email,
- dailydev,
- },
- );
-
- if (error || !response) {
- setIsLoading(false);
- toast.error(error?.message || 'Something went wrong');
-
- return;
- }
-
- await loadProfileSettings();
- toast.success('Profile updated successfully');
- setIsProfileUpdated(true);
- };
-
- const loadProfileSettings = async () => {
- setIsLoading(true);
-
- const { error, response } = await httpGet(
- `${import.meta.env.PUBLIC_API_URL}/v1-get-profile-settings`,
- );
-
- if (error || !response) {
- setIsLoading(false);
- toast.error(error?.message || 'Something went wrong');
-
- return;
- }
-
- const {
- name,
- email,
- links,
- username,
- profileVisibility: defaultProfileVisibility,
- publicConfig,
- avatar,
- } = response;
-
- setAvatar(avatar || '');
- setPublicProfileUrl(username ? `/u/${username}` : '');
- setUsername(username || '');
- setCurrentUsername(username || '');
- setName(name || '');
- setEmail(email || '');
- setGithub(links?.github || '');
- setTwitter(links?.twitter || '');
- setLinkedin(links?.linkedin || '');
- setDailydev(links?.dailydev || '');
- setWebsite(links?.website || '');
- setProfileVisibility(defaultProfileVisibility || 'public');
- setHeadline(publicConfig?.headline || '');
- setRoadmapVisibility(publicConfig?.roadmapVisibility || 'all');
- setCustomRoadmapVisibility(publicConfig?.customRoadmapVisibility || 'all');
- setCustomRoadmaps(publicConfig?.customRoadmaps || []);
- setRoadmaps(publicConfig?.roadmaps || []);
- setIsAvailableForHire(publicConfig?.isAvailableForHire || false);
- setIsEmailVisible(publicConfig?.isEmailVisible ?? true);
-
- setIsLoading(false);
- };
-
- const loadProfileRoadmaps = async () => {
- setIsLoading(true);
-
- const { error, response } = await httpGet<{
- roadmaps: RoadmapType[];
- }>(`${import.meta.env.PUBLIC_API_URL}/v1-get-profile-roadmaps`);
-
- if (error || !response) {
- setIsLoading(false);
- toast.error(error?.message || 'Something went wrong');
-
- return;
- }
-
- setProfileRoadmaps(response?.roadmaps || []);
- setIsLoading(false);
- };
-
- // Make a request to the backend to fill in the form with the current values
- useEffect(() => {
- Promise.all([loadProfileSettings(), loadProfileRoadmaps()]).finally(() => {
- pageProgressMessage.set('');
- });
- }, []);
-
- const publicCustomRoadmaps = profileRoadmaps.filter(
- (r) => r.isCustomResource && r.id && r.title,
- );
- const publicRoadmaps = profileRoadmaps.filter(
- (r) => !r.isCustomResource && r.id && r.title,
- );
-
- return (
-
- {isCreatingRoadmap && (
-
setIsCreatingRoadmap(false)} />
- )}
-
-
-
-
-
-
Skill Profile
- {publicProfileUrl && (
- <>
-
-
- Visit
-
-
{
- copyText(`${window.location.origin}${publicProfileUrl}`);
- }}
- className={cn(
- 'flex shrink-0 flex-row items-center gap-1 rounded-lg border border-black py-0.5 pl-1.5 pr-2.5 text-xs uppercase transition-colors hover:bg-black hover:text-white',
- {
- 'bg-black text-white': isCopied,
- },
- )}
- >
- {!isCopied && }
- {isCopied && }
- {!isCopied ? 'Copy URL' : 'Copied!'}
-
- >
- )}
-
-
-
-
- Create your skill profile to showcase your skills.
-
-
-
-
-
-
- );
-}
diff --git a/src/components/UpdateProfile/UploadProfilePicture.tsx b/src/components/UpdateProfile/UploadProfilePicture.tsx
deleted file mode 100644
index 2e45febd0..000000000
--- a/src/components/UpdateProfile/UploadProfilePicture.tsx
+++ /dev/null
@@ -1,225 +0,0 @@
-import { type ChangeEvent, type FormEvent, useEffect, useRef, useState } from 'react';
-import { TOKEN_COOKIE_NAME, removeAuthToken } from '../../lib/jwt';
-
-interface PreviewFile extends File {
- preview: string;
-}
-
-type UploadProfilePictureProps = {
- isDisabled?: boolean;
- avatarUrl: string;
- type: 'avatar' | 'logo';
- label?: string;
- teamId?: string;
-};
-
-function getDimensions(file: File) {
- return new Promise<{
- width: number;
- height: number;
- }>((resolve) => {
- const img = new Image();
-
- img.onload = () => {
- resolve({ width: img.width, height: img.height });
- };
-
- img.onerror = () => {
- resolve({ width: 0, height: 0 });
- };
-
- img.src = URL.createObjectURL(file);
- });
-}
-
-async function validateImage(file: File): Promise {
- const dimensions = await getDimensions(file);
-
- if (dimensions.width > 3000 || dimensions.height > 3000) {
- return 'Image dimensions are too big. Maximum 3000x3000 pixels.';
- }
-
- if (dimensions.width < 100 || dimensions.height < 100) {
- return 'Image dimensions are too small. Minimum 100x100 pixels.';
- }
-
- if (file.size > 1024 * 1024) {
- return 'Image size is too big. Maximum 1MB.';
- }
-
- return null;
-}
-
-export default function UploadProfilePicture(props: UploadProfilePictureProps) {
- const { avatarUrl, teamId, type, isDisabled = false } = props;
-
- const [file, setFile] = useState(null);
- const [error, setError] = useState('');
- const [isLoading, setIsLoading] = useState(false);
-
- const inputRef = useRef(null);
-
- const onImageChange = async (e: ChangeEvent) => {
- setError('');
-
- const file = (e.target as HTMLInputElement).files?.[0];
- if (!file) {
- return;
- }
-
- const error = await validateImage(file);
- if (error) {
- setError(error);
- return;
- }
-
- setFile(
- Object.assign(file, {
- preview: URL.createObjectURL(file),
- })
- );
- };
-
- const handleSubmit = async (e: FormEvent) => {
- e.preventDefault();
- setError('');
- setIsLoading(true);
-
- if (!file) {
- return;
- }
-
- const formData = new FormData();
- formData.append('name', 'avatar');
- formData.append('avatar', file);
-
- // FIXME: Use `httpCall` helper instead of fetch
- let res: Response;
- if (type === 'avatar') {
- res = await fetch(
- `${import.meta.env.PUBLIC_API_URL}/v1-upload-profile-picture`,
- {
- method: 'POST',
- body: formData,
- credentials: 'include',
- }
- );
- } else {
- res = await fetch(
- `${import.meta.env.PUBLIC_API_URL}/v1-upload-team-logo/${teamId}`,
- {
- method: 'POST',
- body: formData,
- credentials: 'include',
- }
- );
- }
-
- if (res.ok) {
- window.location.reload();
- return;
- }
-
- const data = await res.json();
-
- setError(data?.message || 'Something went wrong');
- setIsLoading(false);
-
- // Logout user if token is invalid
- if (data.status === 401) {
- removeAuthToken();
- window.location.reload();
- }
- };
-
- useEffect(() => {
- // Necessary to revoke the preview URL when the component unmounts for avoiding memory leaks
- return () => {
- if (file) {
- URL.revokeObjectURL(file.preview);
- }
- };
- }, [file]);
-
- return (
-
- );
-}
diff --git a/src/components/UpdateProfile/VisibilityDropdown.tsx b/src/components/UpdateProfile/VisibilityDropdown.tsx
deleted file mode 100644
index 6e3354b9f..000000000
--- a/src/components/UpdateProfile/VisibilityDropdown.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-import { ChevronDown, Globe, LockIcon } from 'lucide-react';
-import { type AllowedProfileVisibility } from '../../api/user.ts';
-import { pageProgressMessage } from '../../stores/page.ts';
-import { httpPatch } from '../../lib/http.ts';
-import { useToast } from '../../hooks/use-toast.ts';
-import { useRef, useState } from 'react';
-import { useOutsideClick } from '../../hooks/use-outside-click.ts';
-import { cn } from '../../lib/classname.ts';
-
-type VisibilityDropdownProps = {
- visibility: AllowedProfileVisibility;
- setVisibility: (visibility: AllowedProfileVisibility) => void;
-};
-
-export function VisibilityDropdown(props: VisibilityDropdownProps) {
- const { visibility, setVisibility } = props;
- const toast = useToast();
- const dropdownRef = useRef(null);
-
- useOutsideClick(dropdownRef, () => {
- setIsVisibilityDropdownOpen(false);
- });
-
- const [isVisibilityDropdownOpen, setIsVisibilityDropdownOpen] =
- useState(false);
-
- async function updateProfileVisibility(visibility: AllowedProfileVisibility) {
- pageProgressMessage.set('Updating profile visibility');
- setIsVisibilityDropdownOpen(false);
-
- const { error } = await httpPatch(
- `${import.meta.env.PUBLIC_API_URL}/v1-update-public-profile-visibility`,
- {
- profileVisibility: visibility,
- },
- );
-
- if (error) {
- toast.error(error.message || 'Something went wrong');
-
- return;
- }
-
- pageProgressMessage.set('');
- setVisibility(visibility);
- }
-
- return (
-
-
{
- setIsVisibilityDropdownOpen(true);
- }}
- className={cn(
- 'flex items-center gap-1 rounded-lg border border-black py-1 pl-1.5 pr-2 text-sm capitalize text-black',
- {
- invisible: isVisibilityDropdownOpen,
- },
- )}
- >
- {visibility === 'public' && }
- {visibility === 'private' && }
- {visibility}
-
-
- {isVisibilityDropdownOpen && (
-
- updateProfileVisibility('public')}
- >
-
- Public
-
- updateProfileVisibility('private')}
- >
-
- Private
-
-
- )}
-
- );
-}
diff --git a/src/components/UserPersona/ChatPersona.tsx b/src/components/UserPersona/ChatPersona.tsx
index 87bdda3d9..03cae6a8f 100644
--- a/src/components/UserPersona/ChatPersona.tsx
+++ b/src/components/UserPersona/ChatPersona.tsx
@@ -47,7 +47,7 @@ export function ChatPersona(props: ChatPersonaProps) {
diff --git a/src/components/UserPublicProfile/UserPublicProfileHeader.tsx b/src/components/UserPublicProfile/UserPublicProfileHeader.tsx
index 794e8abca..49b27dd38 100644
--- a/src/components/UserPublicProfile/UserPublicProfileHeader.tsx
+++ b/src/components/UserPublicProfile/UserPublicProfileHeader.tsx
@@ -26,7 +26,7 @@ export function UserPublicProfileHeader(props: UserPublicProfileHeaderProps) {
src={
avatar
? `${import.meta.env.PUBLIC_AVATAR_BASE_URL}/${avatar}`
- : '/images/default-avatar.png'
+ : '/img/default-avatar.png'
}
alt={name}
className="h-32 w-32 rounded-full object-cover"
@@ -80,6 +80,7 @@ export function UserLink(props: UserLinkProps) {
target="_blank"
href={href}
className="flex h-6 w-6 items-center justify-center rounded-md border"
+ rel="nofollow noopener noreferrer"
>
diff --git a/src/components/VideoModal.tsx b/src/components/VideoModal.tsx
index cfb99e427..d92c0352f 100644
--- a/src/components/VideoModal.tsx
+++ b/src/components/VideoModal.tsx
@@ -3,10 +3,11 @@ import { Modal } from './Modal';
type VideoModalProps = {
videoId: string;
onClose: () => void;
+ startTime?: string;
};
export function VideoModal(props: VideoModalProps) {
- const { videoId, onClose } = props;
+ const { videoId, onClose, startTime = '0' } = props;
return (
VIDEO
diff --git a/src/data/changelogs/ai-quiz-summary-go-roadmap-videos.md b/src/data/changelogs/ai-quiz-summary-go-roadmap-videos.md
new file mode 100644
index 000000000..d043f337c
--- /dev/null
+++ b/src/data/changelogs/ai-quiz-summary-go-roadmap-videos.md
@@ -0,0 +1,20 @@
+---
+title: 'AI Quiz Summaries, New Go Roadmap, and YouTube Videos'
+description: 'Personalized AI summaries for quizzes, completely redrawn Go roadmap, and new YouTube videos for AI features'
+images:
+ 'AI Quiz Summary': 'https://assets.roadmap.sh/guest/quiz-summary-gnwel.png'
+ 'New Go Roadmap': 'https://assets.roadmap.sh/guest/roadmapsh_golang-rqzoc.png'
+ 'YouTube Videos': 'https://assets.roadmap.sh/guest/youtube-videos-4kygb.jpeg'
+ 'Roadmap Editor': 'https://assets.roadmap.sh/guest/ai-inside-editor.png'
+seo:
+ title: 'AI Quiz Summaries, New Go Roadmap, and YouTube Videos'
+ description: ''
+date: 2025-07-23
+---
+
+We've added new AI-powered features and improved our content to help you learn more effectively.
+
+- [AI quizzes](/ai/quiz) now provide personalized AI-generated summaries at the end, along with tailored course and guide suggestions to help you continue learning.
+- The [Go roadmap](/golang) has been completely redrawn with better quality and a more language-focused approach, replacing the previous version that was too web development oriented.
+- We now have [8 new YouTube videos](https://www.youtube.com/playlist?list=PLkZYeFmDuaN38LRfCSdAkzWVtTXMJt11A) covering all our AI features to help you make the most of them.
+- [Roadmap editor](/account/roadmaps) now allows you to generate a base roadmap from a prompt.
\ No newline at end of file
diff --git a/src/data/guides/sql-how-long-to-learn.md b/src/data/guides/sql-how-long-to-learn.md
index 418480062..35f8aec06 100644
--- a/src/data/guides/sql-how-long-to-learn.md
+++ b/src/data/guides/sql-how-long-to-learn.md
@@ -6,6 +6,7 @@ excludedBySlug: '/sql/how-long-to-learn'
seo:
title: How Long Does It Take to Learn SQL? (An Expert's Take)
description: How long does it take to learn SQL? A seasoned expert shares what to expect, from basics to job-ready skills.
+ ogImageUrl: https://assets.roadmap.sh/guest/how-long-does-it-take-to-learn-sql-4o4jz.jpg
isNew: true
type: 'textual'
date: 2025-06-26
@@ -18,6 +19,8 @@ tags:
- 'guide-sitemap'
---
+
+
With steady practice, you can start grasping basic SQL concepts in just a few days, grow confident writing queries within a month, and reach proficiency in advanced SQL concepts in three to six months.
However, before you mark your calendar, remember this timeline does not apply to everyone.
diff --git a/src/data/roadmaps/ai-agents/content/api-requests@52qxjZILV-X1isup6dazC.md b/src/data/roadmaps/ai-agents/content/api-requests@52qxjZILV-X1isup6dazC.md
index f1dae1ac7..97f19d9f5 100644
--- a/src/data/roadmaps/ai-agents/content/api-requests@52qxjZILV-X1isup6dazC.md
+++ b/src/data/roadmaps/ai-agents/content/api-requests@52qxjZILV-X1isup6dazC.md
@@ -4,5 +4,5 @@ API requests let an AI agent ask another service for data or for an action. The
Visit the following resources to learn more:
-- [@article@Introduction to APIs - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Introduction_to_APIs)
+- [@article@Introduction to APIs - MDN Web Docs](https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Client-side_APIs/Introduction)
- [@article@How APIs Power AI Agents: A Comprehensive Guide](https://blog.treblle.com/api-guide-for-ai-agents/)
diff --git a/src/data/roadmaps/backend/content/what-is-http@R12sArWVpbIs_PHxBqVaR.md b/src/data/roadmaps/backend/content/what-is-http@R12sArWVpbIs_PHxBqVaR.md
index 093361ad8..ec5ffab3a 100644
--- a/src/data/roadmaps/backend/content/what-is-http@R12sArWVpbIs_PHxBqVaR.md
+++ b/src/data/roadmaps/backend/content/what-is-http@R12sArWVpbIs_PHxBqVaR.md
@@ -10,3 +10,4 @@ Visit the following resources to learn more:
- [@course@Full HTTP Networking Course](https://www.youtube.com/watch?v=2JYT5f2isg4)
- [@video@HTTP/1 to HTTP/2 to HTTP/3](https://www.youtube.com/watch?v=a-sBfyiXysI)
- [@video@SSL, TLS, HTTPS Explained](https://www.youtube.com/watch?v=j9QmMEWmcfo)
+- [@article@Every thing you need to know about HTTP](https://www3.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html)
diff --git a/src/data/roadmaps/cpp/content/code-editors--ides@ew0AfyadpXPRO0ZY3Z19k.md b/src/data/roadmaps/cpp/content/code-editors--ides@ew0AfyadpXPRO0ZY3Z19k.md
index c00f0152c..a8d861dd7 100644
--- a/src/data/roadmaps/cpp/content/code-editors--ides@ew0AfyadpXPRO0ZY3Z19k.md
+++ b/src/data/roadmaps/cpp/content/code-editors--ides@ew0AfyadpXPRO0ZY3Z19k.md
@@ -8,7 +8,7 @@ Code editors and IDEs are programs specifically designed for editing, managing a
- **Sublime Text**: Sublime Text is a cross-platform text editor that is quite popular among developers due to its speed and minimalist design. It supports C++ with the help of plugins and has a variety of themes and packages available for customization.
-- **CLion**: CLion is an Integrated Development Environment (IDE) developed by JetBrains specifically for C and C++ developers. It provides advanced features like code completion, refactoring support, debugging, and more. It's worth noting that CLion is a commercial IDE, and there is no community version available; users are required to purchase a license for usage.
+- **CLion**: CLion is an Integrated Development Environment (IDE) developed by JetBrains specifically for C and C++ developers. It provides advanced features like code completion, refactoring support, debugging, and more. It's worth noting that CLion is a commercial IDE, but there is community version available.
These are just a few examples, and there are many other code editors available, including Atom, Notepad++, and Geany. They all have their features and may suit different developers' needs. Finding the right code editor is often a matter of personal preference and workflow.
diff --git a/src/data/roadmaps/design-system/content/existing-design-analysis/ab-tests-and-experiments.md b/src/data/roadmaps/design-system/content/ab-tests--experiments@ILRDAnpfGHCZq-FBlbfDO.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/existing-design-analysis/ab-tests-and-experiments.md
rename to src/data/roadmaps/design-system/content/ab-tests--experiments@ILRDAnpfGHCZq-FBlbfDO.md
diff --git a/src/data/roadmaps/design-system/content/tooling/development/accessibility-testing.md b/src/data/roadmaps/design-system/content/accessibility-testing@yhP8EhyCWWRBLkYPyOFeg.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/accessibility-testing.md
rename to src/data/roadmaps/design-system/content/accessibility-testing@yhP8EhyCWWRBLkYPyOFeg.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/iconography/accessibility.md b/src/data/roadmaps/design-system/content/accessibility@DhrnZwQODG0P7D-27_3ec.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/iconography/accessibility.md
rename to src/data/roadmaps/design-system/content/accessibility@DhrnZwQODG0P7D-27_3ec.md
diff --git a/src/data/roadmaps/design-system/content/design-language/guidelines/accessibility.md b/src/data/roadmaps/design-system/content/accessibility@aLtOGjNFxaRzg0PI-ed99.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/guidelines/accessibility.md
rename to src/data/roadmaps/design-system/content/accessibility@aLtOGjNFxaRzg0PI-ed99.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/color/accessibility.md b/src/data/roadmaps/design-system/content/accessibility@fW0cEy2SB0HDbiF7QA7Ev.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/color/accessibility.md
rename to src/data/roadmaps/design-system/content/accessibility@fW0cEy2SB0HDbiF7QA7Ev.md
diff --git a/src/data/roadmaps/design-system/content/avatar@_dIMuXWI73ogboGjnLIpT.md b/src/data/roadmaps/design-system/content/avatar@_dIMuXWI73ogboGjnLIpT.md
new file mode 100644
index 000000000..cc11bdcac
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/avatar@_dIMuXWI73ogboGjnLIpT.md
@@ -0,0 +1,3 @@
+# Avatar
+
+Avatars represent users or entities in interfaces. They should support multiple shapes (circular, square), various sizes, handle missing images with initials or default icons, include status indicators, maintain image quality standards, ensure accessibility, provide loading states, and support group arrangements with proper interactive feedback.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/core-components/avatar.md b/src/data/roadmaps/design-system/content/avatar@h3TZY1yBkzLYUK6W7K7xs.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/avatar.md
rename to src/data/roadmaps/design-system/content/avatar@h3TZY1yBkzLYUK6W7K7xs.md
diff --git a/src/data/roadmaps/design-system/content/core-components/badge.md b/src/data/roadmaps/design-system/content/badge@LNsXQI8sE_5kzSD_iMLJA.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/badge.md
rename to src/data/roadmaps/design-system/content/badge@LNsXQI8sE_5kzSD_iMLJA.md
diff --git a/src/data/roadmaps/design-system/content/badges@UG4AIgJBfZpuhia4Y1K5v.md b/src/data/roadmaps/design-system/content/badges@UG4AIgJBfZpuhia4Y1K5v.md
new file mode 100644
index 000000000..d458e6fa0
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/badges@UG4AIgJBfZpuhia4Y1K5v.md
@@ -0,0 +1,3 @@
+# Badges
+
+Badges are small status indicators that communicate information about objects or actions. Effective design should include numeric indicators for notifications, status badges with distinct colors, category labels, interactive states, multiple sizes, semantic color integration, consistent positioning, content guidelines, and proper accessibility.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/core-components/banner.md b/src/data/roadmaps/design-system/content/banner@kkqRIgdXWaJbX9CjLpwha.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/banner.md
rename to src/data/roadmaps/design-system/content/banner@kkqRIgdXWaJbX9CjLpwha.md
diff --git a/src/data/roadmaps/design-system/content/banners@5DUobzueMZbScyTZTHpCS.md b/src/data/roadmaps/design-system/content/banners@5DUobzueMZbScyTZTHpCS.md
new file mode 100644
index 000000000..bda417b0e
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/banners@5DUobzueMZbScyTZTHpCS.md
@@ -0,0 +1,3 @@
+# Banners
+
+Banners communicate important information at the top of pages. They should support different message types with distinct visuals, various positioning options, clear dismissal mechanisms, relevant actions, consistent iconography, mobile adaptations, subtle animations, content guidelines, proper accessibility, and stacking rules for multiple banners.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/design-tokens/layout/breakpoints.md b/src/data/roadmaps/design-system/content/breakpoints@djwnJq9Y_Hx1Ynw01wr_u.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/layout/breakpoints.md
rename to src/data/roadmaps/design-system/content/breakpoints@djwnJq9Y_Hx1Ynw01wr_u.md
diff --git a/src/data/roadmaps/design-system/content/core-components/button.md b/src/data/roadmaps/design-system/content/button@LWihkf4q5UawjLd84KQxN.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/button.md
rename to src/data/roadmaps/design-system/content/button@LWihkf4q5UawjLd84KQxN.md
diff --git a/src/data/roadmaps/design-system/content/buttons@s6oqvHgwK4Cwyx-JENBbY.md b/src/data/roadmaps/design-system/content/buttons@s6oqvHgwK4Cwyx-JENBbY.md
new file mode 100644
index 000000000..832e4eb76
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/buttons@s6oqvHgwK4Cwyx-JENBbY.md
@@ -0,0 +1,3 @@
+# Buttons
+
+Buttons enable user actions and require clear visual hierarchy (primary, secondary, tertiary), comprehensive interactive states, multiple sizes, icon support, content guidelines, minimum 44px touch targets, loading indicators, responsive behavior, proper accessibility with ARIA labels, and subtle animations.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/core-components/card.md b/src/data/roadmaps/design-system/content/card@rZ7d1C9swiqlRTbdJLZ0R.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/card.md
rename to src/data/roadmaps/design-system/content/card@rZ7d1C9swiqlRTbdJLZ0R.md
diff --git a/src/data/roadmaps/design-system/content/cards@yLLAUGbGUHBTEDkZNK0fm.md b/src/data/roadmaps/design-system/content/cards@yLLAUGbGUHBTEDkZNK0fm.md
new file mode 100644
index 000000000..b3a9e9faf
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/cards@yLLAUGbGUHBTEDkZNK0fm.md
@@ -0,0 +1,3 @@
+# Cards
+
+Cards are flexible content containers that group related information and actions. They require clear content hierarchy, consistent elevation systems, responsive behavior, distinct interactive states, media support, defined action areas, content variants, loading states, proper accessibility, and consistent spacing aligned with the design system.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/core-components/carousel.md b/src/data/roadmaps/design-system/content/carousel@yWEXfjzuzk99dxjZlG4Cq.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/carousel.md
rename to src/data/roadmaps/design-system/content/carousel@yWEXfjzuzk99dxjZlG4Cq.md
diff --git a/src/data/roadmaps/design-system/content/tooling/development/code-style.md b/src/data/roadmaps/design-system/content/code-style@zEqFAuH9zmKTLwwgx54pW.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/code-style.md
rename to src/data/roadmaps/design-system/content/code-style@zEqFAuH9zmKTLwwgx54pW.md
diff --git a/src/data/roadmaps/design-system/content/color@2prUeRYbSJTYjo2quJIKs.md b/src/data/roadmaps/design-system/content/color@2prUeRYbSJTYjo2quJIKs.md
new file mode 100644
index 000000000..1bc48be57
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/color@2prUeRYbSJTYjo2quJIKs.md
@@ -0,0 +1,3 @@
+# Color
+
+Color establishes brand identity and visual hierarchy in design systems. A comprehensive color system should organize colors logically, meet WCAG accessibility standards, support light/dark themes, create semantic categories, establish systematic naming, balance brand expression with function, and provide multiple formats.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/tooling/development/commit-guidelines.md b/src/data/roadmaps/design-system/content/commit-guidelines@IVYe8oh1IWbUbxMZRxVQA.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/commit-guidelines.md
rename to src/data/roadmaps/design-system/content/commit-guidelines@IVYe8oh1IWbUbxMZRxVQA.md
diff --git a/src/data/roadmaps/design-system/content/project-management/communications/communication-channel.md b/src/data/roadmaps/design-system/content/communication-channel@LWrrKrhwXfMDKgbFW5DuO.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/communications/communication-channel.md
rename to src/data/roadmaps/design-system/content/communication-channel@LWrrKrhwXfMDKgbFW5DuO.md
diff --git a/src/data/roadmaps/design-system/content/project-management/communications/community-meetings.md b/src/data/roadmaps/design-system/content/community-meetings@eG8ranXuINtcqWfeMH5GW.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/communications/community-meetings.md
rename to src/data/roadmaps/design-system/content/community-meetings@eG8ranXuINtcqWfeMH5GW.md
diff --git a/src/data/roadmaps/design-system/content/project-management/analytics/component-analytics.md b/src/data/roadmaps/design-system/content/component-analytics@G8dOkM_4hP7wPF3QJ8y4g.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/analytics/component-analytics.md
rename to src/data/roadmaps/design-system/content/component-analytics@G8dOkM_4hP7wPF3QJ8y4g.md
diff --git a/src/data/roadmaps/design-system/content/tooling/development/component-catalog.md b/src/data/roadmaps/design-system/content/component-catalog@VeLiPzbGr22_Mh_8T2Gnf.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/component-catalog.md
rename to src/data/roadmaps/design-system/content/component-catalog@VeLiPzbGr22_Mh_8T2Gnf.md
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/component-library.md b/src/data/roadmaps/design-system/content/component-library@vJ4WytrzY7j10mo8S3O1u.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/component-library.md
rename to src/data/roadmaps/design-system/content/component-library@vJ4WytrzY7j10mo8S3O1u.md
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/component.md b/src/data/roadmaps/design-system/content/component@97cpJyKBKNAq1P_pQZH-t.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/component.md
rename to src/data/roadmaps/design-system/content/component@97cpJyKBKNAq1P_pQZH-t.md
diff --git a/src/data/roadmaps/design-system/content/tooling/design/contribution-guidelines.md b/src/data/roadmaps/design-system/content/contribution-guidelines@TiCNCRpMPgZUhn7JdaIZA.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/design/contribution-guidelines.md
rename to src/data/roadmaps/design-system/content/contribution-guidelines@TiCNCRpMPgZUhn7JdaIZA.md
diff --git a/src/data/roadmaps/design-system/content/tooling/development/contribution-guidelines.md b/src/data/roadmaps/design-system/content/contribution-guidelines@xJ1LAAhiZvbZOLRVc1HZa.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/contribution-guidelines.md
rename to src/data/roadmaps/design-system/content/contribution-guidelines@xJ1LAAhiZvbZOLRVc1HZa.md
diff --git a/src/data/roadmaps/design-system/content/core-components/index.md b/src/data/roadmaps/design-system/content/creating-core-components@Hw_LQInG6OtSwDXch3Lvg.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/index.md
rename to src/data/roadmaps/design-system/content/creating-core-components@Hw_LQInG6OtSwDXch3Lvg.md
diff --git a/src/data/roadmaps/design-system/content/tooling/index.md b/src/data/roadmaps/design-system/content/creating-core-components@jggrr5nZOe6FY3ZrZJTOw.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/index.md
rename to src/data/roadmaps/design-system/content/creating-core-components@jggrr5nZOe6FY3ZrZJTOw.md
diff --git a/src/data/roadmaps/design-system/content/design-language/index.md b/src/data/roadmaps/design-system/content/creating-design-language@JnaNZ9MfMrXQrjW2wABzB.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/index.md
rename to src/data/roadmaps/design-system/content/creating-design-language@JnaNZ9MfMrXQrjW2wABzB.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/color/dark-mode.md b/src/data/roadmaps/design-system/content/dark-mode@kxUnqpydDwB73IwrCPZM0.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/color/dark-mode.md
rename to src/data/roadmaps/design-system/content/dark-mode@kxUnqpydDwB73IwrCPZM0.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/index.md b/src/data/roadmaps/design-system/content/defining-design-tokens@a53cl6ZKvYXxG25Ii2_zu.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/index.md
rename to src/data/roadmaps/design-system/content/defining-design-tokens@a53cl6ZKvYXxG25Ii2_zu.md
diff --git a/src/data/roadmaps/design-system/content/tooling/design/design-editor.md b/src/data/roadmaps/design-system/content/design-editor@ccpT9MPFbc3Ewjm1tFMsZ.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/design/design-editor.md
rename to src/data/roadmaps/design-system/content/design-editor@ccpT9MPFbc3Ewjm1tFMsZ.md
diff --git a/src/data/roadmaps/design-system/content/design-language/brand/index.md b/src/data/roadmaps/design-system/content/design-language/brand/index.md
deleted file mode 100644
index e5bd814af..000000000
--- a/src/data/roadmaps/design-system/content/design-language/brand/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Brand
-
-Brand drives every single decision you make when building new products or features. A good brand is much more than a name and a logo. It’s the values that define your unique identity and what makes you stand out from others.
diff --git a/src/data/roadmaps/design-system/content/design-language/brand/vision.md b/src/data/roadmaps/design-system/content/design-language/brand/vision.md
deleted file mode 100644
index 88d7b8314..000000000
--- a/src/data/roadmaps/design-system/content/design-language/brand/vision.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Vision
-
-Identify why you exist, what your values are and how they’ll help guide the future of your product.
diff --git a/src/data/roadmaps/design-system/content/design-language/guidelines/index.md b/src/data/roadmaps/design-system/content/design-language/guidelines/index.md
deleted file mode 100644
index 8ed6df502..000000000
--- a/src/data/roadmaps/design-system/content/design-language/guidelines/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Guidelines
-
-Providing guidance on how to approach common UX patterns will allow your organisation to establish a consistent approach and a consistent user experience on any platform.
diff --git a/src/data/roadmaps/design-system/content/design-language/logo/index.md b/src/data/roadmaps/design-system/content/design-language/logo/index.md
deleted file mode 100644
index e293f00de..000000000
--- a/src/data/roadmaps/design-system/content/design-language/logo/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Logo
-
-Most customers form an opinion about a product in seconds. In most cases, your logo will be the first brand asset someone sees. It’s all about making the right first impression. A distinctive logo helps users recognise a product immediately and gives them the essence of your branding.
diff --git a/src/data/roadmaps/design-system/content/design-language/logo/usage-guidance.md b/src/data/roadmaps/design-system/content/design-language/logo/usage-guidance.md
deleted file mode 100644
index bb2634b72..000000000
--- a/src/data/roadmaps/design-system/content/design-language/logo/usage-guidance.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Usage Guidance
-
-These are the logo crimes, providing contextual examples of what to (not) do with your logo.
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/design-language.md b/src/data/roadmaps/design-system/content/design-language@fPUuXrlchna3K00KcY4O6.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/design-language.md
rename to src/data/roadmaps/design-system/content/design-language@fPUuXrlchna3K00KcY4O6.md
diff --git a/src/data/roadmaps/design-system/content/design-language/brand/design-principles.md b/src/data/roadmaps/design-system/content/design-principles@1RJrMVJf_3clM7E5OML-f.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/brand/design-principles.md
rename to src/data/roadmaps/design-system/content/design-principles@1RJrMVJf_3clM7E5OML-f.md
diff --git a/src/data/roadmaps/design-system/content/design-system-basics/design-system-examples.md b/src/data/roadmaps/design-system/content/design-system-examples@hauTvrBOAHgrUnO_m_kDM.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-basics/design-system-examples.md
rename to src/data/roadmaps/design-system/content/design-system-examples@hauTvrBOAHgrUnO_m_kDM.md
diff --git a/src/data/roadmaps/design-system/content/design-system-basics/design-system-vs-component-library.md b/src/data/roadmaps/design-system/content/design-system-vs-component-library@J5mU0v491qrm-mr1W3Msd.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-basics/design-system-vs-component-library.md
rename to src/data/roadmaps/design-system/content/design-system-vs-component-library@J5mU0v491qrm-mr1W3Msd.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/color/index.md b/src/data/roadmaps/design-system/content/design-tokens/color/index.md
deleted file mode 100644
index cd000a1f2..000000000
--- a/src/data/roadmaps/design-system/content/design-tokens/color/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Color
-
-Not only an efficient way to showcase your brand, but also an efficient way to communicate with your users. Colour palettes created with purpose over aesthetics in mind can help you create intuitive design patterns by adding meaning to your interface.
diff --git a/src/data/roadmaps/design-system/content/design-tokens/iconography/index.md b/src/data/roadmaps/design-system/content/design-tokens/iconography/index.md
deleted file mode 100644
index fe8ed0d18..000000000
--- a/src/data/roadmaps/design-system/content/design-tokens/iconography/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Iconography
-
-Icons are symbols that represent functionality or content. They’re especially recognisable and helpful in user interfaces since their meaning can be understood at a glance. hough they can be used just for decoration, their full potential can be realised when they’re used meaningfully and consistently.
diff --git a/src/data/roadmaps/design-system/content/design-tokens/layout/index.md b/src/data/roadmaps/design-system/content/design-tokens/layout/index.md
deleted file mode 100644
index 7f84d0e0f..000000000
--- a/src/data/roadmaps/design-system/content/design-tokens/layout/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Layout
-
-A well thought out layout goes a long way. Consistent use of a grid and spacing makes it easier for your users to scan the user interface and grasp the content.
diff --git a/src/data/roadmaps/design-system/content/design-tokens/typography/index.md b/src/data/roadmaps/design-system/content/design-tokens/typography/index.md
deleted file mode 100644
index 9a690fec9..000000000
--- a/src/data/roadmaps/design-system/content/design-tokens/typography/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Typography
-
-Typography is one of the main ways you surface content in products. A clear hierarchy and contrasting styles in your typography scale will make things easier to read and help with the overall structure of your product. It’s also an opportunity to visualise your brand character and presence.
diff --git a/src/data/roadmaps/design-system/content/existing-design-analysis/documentation.md b/src/data/roadmaps/design-system/content/documentation@-b4GjLpL_ppDMJSiChTef.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/existing-design-analysis/documentation.md
rename to src/data/roadmaps/design-system/content/documentation@-b4GjLpL_ppDMJSiChTef.md
diff --git a/src/data/roadmaps/design-system/content/tooling/development/documentation.md b/src/data/roadmaps/design-system/content/documentation@k1Lwk_b6cLIeyQwc4RUh1.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/documentation.md
rename to src/data/roadmaps/design-system/content/documentation@k1Lwk_b6cLIeyQwc4RUh1.md
diff --git a/src/data/roadmaps/design-system/content/core-components/dropdown.md b/src/data/roadmaps/design-system/content/dropdown@MtBSvKoyjdLd6DIdolLRi.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/dropdown.md
rename to src/data/roadmaps/design-system/content/dropdown@MtBSvKoyjdLd6DIdolLRi.md
diff --git a/src/data/roadmaps/design-system/content/dropdowns@hzVwLVzAij6TgPTcNHyhv.md b/src/data/roadmaps/design-system/content/dropdowns@hzVwLVzAij6TgPTcNHyhv.md
new file mode 100644
index 000000000..51749c36b
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/dropdowns@hzVwLVzAij6TgPTcNHyhv.md
@@ -0,0 +1,3 @@
+# Dropdowns
+
+Dropdowns reveal option lists when activated to save space. They need clear triggers with visual indicators, organized options with grouping, search/filtering for long lists, multi-select support, smart positioning, full keyboard navigation, loading states, mobile adaptations, proper accessibility, and performance optimization.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/existing-design-analysis/identify-components.md b/src/data/roadmaps/design-system/content/existing-design-analysis/identify-components.md
deleted file mode 100644
index bcb2d19e6..000000000
--- a/src/data/roadmaps/design-system/content/existing-design-analysis/identify-components.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Identify Components
-
-Components of the application are created using a composition of design elements gathered in the previous step. Identify the list of components required for the application, which could include buttons, dropdowns, carousels, tabs, icons, alerts, toasts etc. Also, make sure to keep track of the different states of these components as well as different variants and actions.
diff --git a/src/data/roadmaps/design-system/content/existing-design-analysis/identify-design-elements.md b/src/data/roadmaps/design-system/content/existing-design-analysis/identify-design-elements.md
deleted file mode 100644
index 0922426d7..000000000
--- a/src/data/roadmaps/design-system/content/existing-design-analysis/identify-design-elements.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Identify Design Elements
-
-Use the results of visual audit and prepare a comprehensive list of design elements such as Colors, Typography, Sizes, Spaces, Grid, Layouts etc. These elements will be the building blocks of your components.
diff --git a/src/data/roadmaps/design-system/content/existing-design-analysis/index.md b/src/data/roadmaps/design-system/content/existing-design-analysis@8eWhvW2zDIxMGHaXl0Y9i.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/existing-design-analysis/index.md
rename to src/data/roadmaps/design-system/content/existing-design-analysis@8eWhvW2zDIxMGHaXl0Y9i.md
diff --git a/src/data/roadmaps/design-system/content/project-management/communications/faqs.md b/src/data/roadmaps/design-system/content/faqs@cpAeotBxN8BCsU9RqTEue.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/communications/faqs.md
rename to src/data/roadmaps/design-system/content/faqs@cpAeotBxN8BCsU9RqTEue.md
diff --git a/src/data/roadmaps/design-system/content/design-language/logo/different-file-formats.md b/src/data/roadmaps/design-system/content/file-formats@-6LPUMRm-SqvRVEWPDFl8.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/logo/different-file-formats.md
rename to src/data/roadmaps/design-system/content/file-formats@-6LPUMRm-SqvRVEWPDFl8.md
diff --git a/src/data/roadmaps/design-system/content/forms@5LCMzBnnS206t5EtgaUx8.md b/src/data/roadmaps/design-system/content/forms@5LCMzBnnS206t5EtgaUx8.md
new file mode 100644
index 000000000..d07ca9901
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/forms@5LCMzBnnS206t5EtgaUx8.md
@@ -0,0 +1,3 @@
+# Forms
+
+Forms collect user input and require standardized input components, comprehensive validation systems, effective labeling strategies, consistent layouts, clear error handling, progressive disclosure, required field indicators, auto-complete integration, proper accessibility, and mobile optimization.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/design-tokens/color/functional-colors.md b/src/data/roadmaps/design-system/content/functional-colors@__Pv19gRr2SFknVnfm0Mr.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/color/functional-colors.md
rename to src/data/roadmaps/design-system/content/functional-colors@__Pv19gRr2SFknVnfm0Mr.md
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/governance.md b/src/data/roadmaps/design-system/content/governance@kifE3JE2immnU1O3-toZf.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/governance.md
rename to src/data/roadmaps/design-system/content/governance@kifE3JE2immnU1O3-toZf.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/iconography/grid-relation.md b/src/data/roadmaps/design-system/content/grid-relation@6Hmj_TeQ563jshqAAl__I.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/iconography/grid-relation.md
rename to src/data/roadmaps/design-system/content/grid-relation@6Hmj_TeQ563jshqAAl__I.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/typography/grid-relation.md b/src/data/roadmaps/design-system/content/grid-relation@Zl7MVllzJgObruYtlibKf.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/typography/grid-relation.md
rename to src/data/roadmaps/design-system/content/grid-relation@Zl7MVllzJgObruYtlibKf.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/layout/grid.md b/src/data/roadmaps/design-system/content/grid@8f2V-rM7soorTTvNo5Vcx.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/layout/grid.md
rename to src/data/roadmaps/design-system/content/grid@8f2V-rM7soorTTvNo5Vcx.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/typography/guidelines.md b/src/data/roadmaps/design-system/content/guidelines@Jab5LO0mGhTy1cU61Catu.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/typography/guidelines.md
rename to src/data/roadmaps/design-system/content/guidelines@Jab5LO0mGhTy1cU61Catu.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/color/guidelines.md b/src/data/roadmaps/design-system/content/guidelines@XDfxs5cgjSuTEprZi2Z5b.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/color/guidelines.md
rename to src/data/roadmaps/design-system/content/guidelines@XDfxs5cgjSuTEprZi2Z5b.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/iconography/guidelines.md b/src/data/roadmaps/design-system/content/guidelines@eTxhpC3AQIMcUax6WFU9U.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/iconography/guidelines.md
rename to src/data/roadmaps/design-system/content/guidelines@eTxhpC3AQIMcUax6WFU9U.md
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/guidelines.md b/src/data/roadmaps/design-system/content/guidelines@mlBzJ2YvBr9QuOthKdj0p.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/guidelines.md
rename to src/data/roadmaps/design-system/content/guidelines@mlBzJ2YvBr9QuOthKdj0p.md
diff --git a/src/data/roadmaps/design-system/content/core-components/icon.md b/src/data/roadmaps/design-system/content/icon@bzY_iXRnotct_WnNRTlbd.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/icon.md
rename to src/data/roadmaps/design-system/content/icon@bzY_iXRnotct_WnNRTlbd.md
diff --git a/src/data/roadmaps/design-system/content/icons@aak3227IDDJMh0MquQX6m.md b/src/data/roadmaps/design-system/content/icons@aak3227IDDJMh0MquQX6m.md
new file mode 100644
index 000000000..0029521f5
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/icons@aak3227IDDJMh0MquQX6m.md
@@ -0,0 +1,3 @@
+# Icons
+
+Icons are visual symbols that communicate meaning quickly. They should maintain consistent style, use a grid system, provide multiple sizes, organize into semantic categories, ensure accessibility, consider cultural neutrality, be available in multiple formats, include interactive states, and follow systematic versioning.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/existing-design-analysis/existing-design-process.md b/src/data/roadmaps/design-system/content/identify-existing-design-process@CnsDoZ3gIaPeNbwHuZXYJ.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/existing-design-analysis/existing-design-process.md
rename to src/data/roadmaps/design-system/content/identify-existing-design-process@CnsDoZ3gIaPeNbwHuZXYJ.md
diff --git a/src/data/roadmaps/design-system/content/core-components/input-checkbox.md b/src/data/roadmaps/design-system/content/input-checkbox@F5_sxUnnGEdgF6BkA5T5x.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/input-checkbox.md
rename to src/data/roadmaps/design-system/content/input-checkbox@F5_sxUnnGEdgF6BkA5T5x.md
diff --git a/src/data/roadmaps/design-system/content/core-components/input-radio.md b/src/data/roadmaps/design-system/content/input-radio@rN-_plAA5FkcQl03wsL18.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/input-radio.md
rename to src/data/roadmaps/design-system/content/input-radio@rN-_plAA5FkcQl03wsL18.md
diff --git a/src/data/roadmaps/design-system/content/core-components/input-switch.md b/src/data/roadmaps/design-system/content/input-switch@NISeaJUlDtQ0kSuyxmrOT.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/input-switch.md
rename to src/data/roadmaps/design-system/content/input-switch@NISeaJUlDtQ0kSuyxmrOT.md
diff --git a/src/data/roadmaps/design-system/content/core-components/input-text.md b/src/data/roadmaps/design-system/content/input-text@hjiJJg4KNr8lyktFQd868.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/input-text.md
rename to src/data/roadmaps/design-system/content/input-text@hjiJJg4KNr8lyktFQd868.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/iconography/keywords.md b/src/data/roadmaps/design-system/content/keywords@HDf2L4F1f8uUGpVaf7Y7z.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/iconography/keywords.md
rename to src/data/roadmaps/design-system/content/keywords@HDf2L4F1f8uUGpVaf7Y7z.md
diff --git a/src/data/roadmaps/design-system/content/core-components/list.md b/src/data/roadmaps/design-system/content/list@2T7tiM3Ew3H1U5iJR2TDb.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/list.md
rename to src/data/roadmaps/design-system/content/list@2T7tiM3Ew3H1U5iJR2TDb.md
diff --git a/src/data/roadmaps/design-system/content/core-components/loading-indicator.md b/src/data/roadmaps/design-system/content/loading-indicator@JhnHOMIlU6mQcwvIpErUY.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/loading-indicator.md
rename to src/data/roadmaps/design-system/content/loading-indicator@JhnHOMIlU6mQcwvIpErUY.md
diff --git a/src/data/roadmaps/design-system/content/project-management/analytics/error-logging.md b/src/data/roadmaps/design-system/content/logging@xYqDmDpjwkShtL86nt-vY.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/analytics/error-logging.md
rename to src/data/roadmaps/design-system/content/logging@xYqDmDpjwkShtL86nt-vY.md
diff --git a/src/data/roadmaps/design-system/content/making-a-design-system/index.md b/src/data/roadmaps/design-system/content/making-a-design-system@dUaoMARPabiD4DRqdkaer.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/making-a-design-system/index.md
rename to src/data/roadmaps/design-system/content/making-a-design-system@dUaoMARPabiD4DRqdkaer.md
diff --git a/src/data/roadmaps/design-system/content/making-a-design-system/from-existing-design.md b/src/data/roadmaps/design-system/content/making-it-from-existing-design@z5gBy7BjlBKwbYbxXtoDA.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/making-a-design-system/from-existing-design.md
rename to src/data/roadmaps/design-system/content/making-it-from-existing-design@z5gBy7BjlBKwbYbxXtoDA.md
diff --git a/src/data/roadmaps/design-system/content/making-a-design-system/from-scratch.md b/src/data/roadmaps/design-system/content/making-it-from-scratch@-9I3fTpnQlmcZmIIuQiPe.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/making-a-design-system/from-scratch.md
rename to src/data/roadmaps/design-system/content/making-it-from-scratch@-9I3fTpnQlmcZmIIuQiPe.md
diff --git a/src/data/roadmaps/design-system/content/design-language/guidelines/microcopy-guidelines.md b/src/data/roadmaps/design-system/content/microcopy-guidelines@bD-DjUbAA6l2eK1R9ITcK.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/guidelines/microcopy-guidelines.md
rename to src/data/roadmaps/design-system/content/microcopy-guidelines@bD-DjUbAA6l2eK1R9ITcK.md
diff --git a/src/data/roadmaps/design-system/content/project-management/task-management/milestones.md b/src/data/roadmaps/design-system/content/milestones@ruPXxVwmD9vSlS7rBZmA-.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/task-management/milestones.md
rename to src/data/roadmaps/design-system/content/milestones@ruPXxVwmD9vSlS7rBZmA-.md
diff --git a/src/data/roadmaps/design-system/content/core-components/modal.md b/src/data/roadmaps/design-system/content/modal@IjNitkG25vNo30rB4ckNV.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/modal.md
rename to src/data/roadmaps/design-system/content/modal@IjNitkG25vNo30rB4ckNV.md
diff --git a/src/data/roadmaps/design-system/content/design-language/logo/monochrome-version.md b/src/data/roadmaps/design-system/content/monochrome-version@Wn8CylBz-hyl9-iXcUVTO.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/logo/monochrome-version.md
rename to src/data/roadmaps/design-system/content/monochrome-version@Wn8CylBz-hyl9-iXcUVTO.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/iconography/naming.md b/src/data/roadmaps/design-system/content/naming@wiclAEEYioRgLmXFcKQ4E.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/iconography/naming.md
rename to src/data/roadmaps/design-system/content/naming@wiclAEEYioRgLmXFcKQ4E.md
diff --git a/src/data/roadmaps/design-system/content/design-system-basics/need-of-design-system.md b/src/data/roadmaps/design-system/content/need-of-design-system@2rlmLn_yQQV-7DpX1qT98.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-basics/need-of-design-system.md
rename to src/data/roadmaps/design-system/content/need-of-design-system@2rlmLn_yQQV-7DpX1qT98.md
diff --git a/src/data/roadmaps/design-system/content/project-management/communications/open-hours.md b/src/data/roadmaps/design-system/content/open-hours@YWoPoO9IW3vLZyxLL2fnT.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/communications/open-hours.md
rename to src/data/roadmaps/design-system/content/open-hours@YWoPoO9IW3vLZyxLL2fnT.md
diff --git a/src/data/roadmaps/design-system/content/other@Ia1gYzepJOTvTro961eSj.md b/src/data/roadmaps/design-system/content/other@Ia1gYzepJOTvTro961eSj.md
new file mode 100644
index 000000000..7389b680b
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/other@Ia1gYzepJOTvTro961eSj.md
@@ -0,0 +1,3 @@
+# Other Components
+
+Specialized elements beyond core components include badges for notifications, breadcrumbs for navigation, progress indicators, tooltips for help, pagination for browsing, tab systems, accordions for collapsible content, modals for focused interactions, notification systems, and basic data visualization elements.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/pattern.md b/src/data/roadmaps/design-system/content/pattern@7xPT8rUX3hjSWbxH_FfQs.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/pattern.md
rename to src/data/roadmaps/design-system/content/pattern@7xPT8rUX3hjSWbxH_FfQs.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/typography/performance.md b/src/data/roadmaps/design-system/content/performance@wFL9axjaPcVvI8XWduxgz.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/typography/performance.md
rename to src/data/roadmaps/design-system/content/performance@wFL9axjaPcVvI8XWduxgz.md
diff --git a/src/data/roadmaps/design-system/content/existing-design-analysis/visual-audit.md b/src/data/roadmaps/design-system/content/performing-a-visual-audit@NKm-gXbt5Y7dDwKVkPHjX.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/existing-design-analysis/visual-audit.md
rename to src/data/roadmaps/design-system/content/performing-a-visual-audit@NKm-gXbt5Y7dDwKVkPHjX.md
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/pilot.md b/src/data/roadmaps/design-system/content/pilot@4dzoZmkNHPedgLqLy93t8.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/pilot.md
rename to src/data/roadmaps/design-system/content/pilot@4dzoZmkNHPedgLqLy93t8.md
diff --git a/src/data/roadmaps/design-system/content/design-language/logo/placement-and-clearance-guidance.md b/src/data/roadmaps/design-system/content/placement--clearance-guidance@7n61402xwhIgJ7dPHg8q7.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/logo/placement-and-clearance-guidance.md
rename to src/data/roadmaps/design-system/content/placement--clearance-guidance@7n61402xwhIgJ7dPHg8q7.md
diff --git a/src/data/roadmaps/design-system/content/placement-guidance@7n61402xwhIgJ7dPHg8q7.md b/src/data/roadmaps/design-system/content/placement-guidance@7n61402xwhIgJ7dPHg8q7.md
new file mode 100644
index 000000000..14582e1a3
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/placement-guidance@7n61402xwhIgJ7dPHg8q7.md
@@ -0,0 +1,3 @@
+# Placement Guidance
+
+Logo placement guidance ensures consistent brand representation through clear positioning, sizing, and clearance rules. Effective guidelines should define minimum clearance areas, establish preferred positions for different contexts, provide size specifications, define background treatments, and account for platform-specific requirements.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/tooling/design/plugins.md b/src/data/roadmaps/design-system/content/plugins@uO-2O0Jwh_DxrMAB9wxp1.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/design/plugins.md
rename to src/data/roadmaps/design-system/content/plugins@uO-2O0Jwh_DxrMAB9wxp1.md
diff --git a/src/data/roadmaps/design-system/content/tooling/development/pr-templates.md b/src/data/roadmaps/design-system/content/pr-templates@wd9ZHZmqV7wbLN-9V4EQy.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/pr-templates.md
rename to src/data/roadmaps/design-system/content/pr-templates@wd9ZHZmqV7wbLN-9V4EQy.md
diff --git a/src/data/roadmaps/design-system/content/project-management/analytics/index.md b/src/data/roadmaps/design-system/content/project-management/analytics/index.md
deleted file mode 100644
index 49e48e31f..000000000
--- a/src/data/roadmaps/design-system/content/project-management/analytics/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Analytics
-
-Data isn’t the only driving factor when it comes to the development of design systems. Keeping a sharp eye on how your system’s used in the development process and the end product can inform your go-forward strategy.
diff --git a/src/data/roadmaps/design-system/content/project-management/communications/index.md b/src/data/roadmaps/design-system/content/project-management/communications/index.md
deleted file mode 100644
index 9654e65ce..000000000
--- a/src/data/roadmaps/design-system/content/project-management/communications/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Communications
-
-Your users play a great role in shaping your design system. Creating communication channels where they can raise their voices helps you keep track of how they’re using your system. It’ll also improve their sense of ownership and the adoption of your system.
diff --git a/src/data/roadmaps/design-system/content/project-management/task-management/index.md b/src/data/roadmaps/design-system/content/project-management/task-management/index.md
deleted file mode 100644
index 4f4557062..000000000
--- a/src/data/roadmaps/design-system/content/project-management/task-management/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Task Management
-
-Solid task management and workflows are a crucial step in executing any project. Adopting a methodology like Agile or Kanban helps you cover a lot of ground.
diff --git a/src/data/roadmaps/design-system/content/project-management/index.md b/src/data/roadmaps/design-system/content/project-management@JfXwzkN29UGz17FYHHE3A.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/index.md
rename to src/data/roadmaps/design-system/content/project-management@JfXwzkN29UGz17FYHHE3A.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/typography/readability.md b/src/data/roadmaps/design-system/content/readability@L2NHddsv5RGR_BW0I3f4T.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/typography/readability.md
rename to src/data/roadmaps/design-system/content/readability@L2NHddsv5RGR_BW0I3f4T.md
diff --git a/src/data/roadmaps/design-system/content/existing-design-analysis/regional-requirements.md b/src/data/roadmaps/design-system/content/regional-requirements@pRJ9wEPNfFx_6EYB501vk.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/existing-design-analysis/regional-requirements.md
rename to src/data/roadmaps/design-system/content/regional-requirements@pRJ9wEPNfFx_6EYB501vk.md
diff --git a/src/data/roadmaps/design-system/content/tooling/development/release-strategy.md b/src/data/roadmaps/design-system/content/release-strategy@CfWCQNaCJGL-egRhFhc4B.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/release-strategy.md
rename to src/data/roadmaps/design-system/content/release-strategy@CfWCQNaCJGL-egRhFhc4B.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/iconography/reserved-icons.md b/src/data/roadmaps/design-system/content/reserved-icons@Y0KxHVrcNGHDao-38Oz3w.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/iconography/reserved-icons.md
rename to src/data/roadmaps/design-system/content/reserved-icons@Y0KxHVrcNGHDao-38Oz3w.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/typography/responsiveness.md b/src/data/roadmaps/design-system/content/responsiveness@8YVCtgYRHR3VcpUJXMVwP.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/typography/responsiveness.md
rename to src/data/roadmaps/design-system/content/responsiveness@8YVCtgYRHR3VcpUJXMVwP.md
diff --git a/src/data/roadmaps/design-system/content/project-management/task-management/roadmap.md b/src/data/roadmaps/design-system/content/roadmap@gMrX5600JqFDplriq-eU3.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/task-management/roadmap.md
rename to src/data/roadmaps/design-system/content/roadmap@gMrX5600JqFDplriq-eU3.md
diff --git a/src/data/roadmaps/design-system/content/core-components/select.md b/src/data/roadmaps/design-system/content/select@n1nUkMqGtPobZPJHCvPsk.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/select.md
rename to src/data/roadmaps/design-system/content/select@n1nUkMqGtPobZPJHCvPsk.md
diff --git a/src/data/roadmaps/design-system/content/tooling/development/semantic-versioning.md b/src/data/roadmaps/design-system/content/semantic-versioning@ZLt1yJqinC8OSpqucC2dV.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/semantic-versioning.md
rename to src/data/roadmaps/design-system/content/semantic-versioning@ZLt1yJqinC8OSpqucC2dV.md
diff --git a/src/data/roadmaps/design-system/content/project-management/analytics/service-and-health-metrics.md b/src/data/roadmaps/design-system/content/service-and-health-metrics@5znnOkpf9G9tdiMWB6Rut.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/analytics/service-and-health-metrics.md
rename to src/data/roadmaps/design-system/content/service-and-health-metrics@5znnOkpf9G9tdiMWB6Rut.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/iconography/sizes.md b/src/data/roadmaps/design-system/content/sizes@w3LS85eFerscaxb2Xp-dP.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/iconography/sizes.md
rename to src/data/roadmaps/design-system/content/sizes@w3LS85eFerscaxb2Xp-dP.md
diff --git a/src/data/roadmaps/design-system/content/sizing@78RsPhsWpl00AbkwKXUxL.md b/src/data/roadmaps/design-system/content/sizing@78RsPhsWpl00AbkwKXUxL.md
new file mode 100644
index 000000000..aae47bc3b
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/sizing@78RsPhsWpl00AbkwKXUxL.md
@@ -0,0 +1,3 @@
+# Sizing
+
+Sizing tokens establish consistent dimensions across components and layouts. An effective system should establish a foundational unit, create predefined size variations, ensure minimum accessibility requirements, define standard icon sizes, establish container dimensions, implement fluid sizing, and account for platform-specific requirements.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/design-language/logo/small-use-guidance.md b/src/data/roadmaps/design-system/content/small-use-guidance@FA3JsZgNhKrgNHVtVreol.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/logo/small-use-guidance.md
rename to src/data/roadmaps/design-system/content/small-use-guidance@FA3JsZgNhKrgNHVtVreol.md
diff --git a/src/data/roadmaps/design-system/content/spaces@GtLYBPJjdZwG0qgA7erk7.md b/src/data/roadmaps/design-system/content/spaces@GtLYBPJjdZwG0qgA7erk7.md
new file mode 100644
index 000000000..c0c53a9ec
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/spaces@GtLYBPJjdZwG0qgA7erk7.md
@@ -0,0 +1,3 @@
+# Spacing
+
+Spacing tokens define white space between elements, creating visual rhythm and clear relationships. An effective system should establish a foundational unit, create systematic scales, define consistent internal spacing, establish layout guidelines, implement fluid spacing, create meaningful categories, and ensure cross-platform consistency.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/design-tokens/layout/spacing.md b/src/data/roadmaps/design-system/content/spacking@dXaYOwTAnYSlipNEBSV9l.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/layout/spacing.md
rename to src/data/roadmaps/design-system/content/spacking@dXaYOwTAnYSlipNEBSV9l.md
diff --git a/src/data/roadmaps/design-system/content/design-system-basics/stakeholders-involved.md b/src/data/roadmaps/design-system/content/stakeholders-involved-in-building@_3_tFOpQisx6DSP4Yc2E2.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-basics/stakeholders-involved.md
rename to src/data/roadmaps/design-system/content/stakeholders-involved-in-building@_3_tFOpQisx6DSP4Yc2E2.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/iconography/style.md b/src/data/roadmaps/design-system/content/style@SPK1i0XuHpNEWyi1iIxrV.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/iconography/style.md
rename to src/data/roadmaps/design-system/content/style@SPK1i0XuHpNEWyi1iIxrV.md
diff --git a/src/data/roadmaps/design-system/content/core-components/tabs.md b/src/data/roadmaps/design-system/content/tabs@1vYR1EMyZhJA-znxnFBBb.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/tabs.md
rename to src/data/roadmaps/design-system/content/tabs@1vYR1EMyZhJA-znxnFBBb.md
diff --git a/src/data/roadmaps/design-system/content/design-language/brand/terminology.md b/src/data/roadmaps/design-system/content/terminology@Zspu1SsuTE34PVmYePcs4.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/brand/terminology.md
rename to src/data/roadmaps/design-system/content/terminology@Zspu1SsuTE34PVmYePcs4.md
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/index.md b/src/data/roadmaps/design-system/content/terminology@de0TKvmFTDmKGZc5X7iFq.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/index.md
rename to src/data/roadmaps/design-system/content/terminology@de0TKvmFTDmKGZc5X7iFq.md
diff --git a/src/data/roadmaps/design-system/content/core-components/textarea.md b/src/data/roadmaps/design-system/content/textarea@iusI39fxcu2rbMXiosaM6.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/textarea.md
rename to src/data/roadmaps/design-system/content/textarea@iusI39fxcu2rbMXiosaM6.md
diff --git a/src/data/roadmaps/design-system/content/project-management/task-management/ticketing.md b/src/data/roadmaps/design-system/content/ticketing@i39J0fk4DaPeNFIMbH0ap.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/task-management/ticketing.md
rename to src/data/roadmaps/design-system/content/ticketing@i39J0fk4DaPeNFIMbH0ap.md
diff --git a/src/data/roadmaps/design-system/content/core-components/toast.md b/src/data/roadmaps/design-system/content/toast@-T7uL6a3lJ5-IIcDaG6IN.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/toast.md
rename to src/data/roadmaps/design-system/content/toast@-T7uL6a3lJ5-IIcDaG6IN.md
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/token.md b/src/data/roadmaps/design-system/content/token@jETJVuS_EczJiQASLqaQr.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/token.md
rename to src/data/roadmaps/design-system/content/token@jETJVuS_EczJiQASLqaQr.md
diff --git a/src/data/roadmaps/design-system/content/design-language/brand/tone-of-voice.md b/src/data/roadmaps/design-system/content/tone-of-voice@fnlVIgsmyxj2UVCCjM-8g.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/brand/tone-of-voice.md
rename to src/data/roadmaps/design-system/content/tone-of-voice@fnlVIgsmyxj2UVCCjM-8g.md
diff --git a/src/data/roadmaps/design-system/content/project-management/analytics/tooling-analytics.md b/src/data/roadmaps/design-system/content/tooling-analytics@qiJGYYWL4naJX-MgZA9Ms.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/project-management/analytics/tooling-analytics.md
rename to src/data/roadmaps/design-system/content/tooling-analytics@qiJGYYWL4naJX-MgZA9Ms.md
diff --git a/src/data/roadmaps/design-system/content/tooling/design/index.md b/src/data/roadmaps/design-system/content/tooling/design/index.md
deleted file mode 100644
index 3ea4cab2a..000000000
--- a/src/data/roadmaps/design-system/content/tooling/design/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Design
-
-The UI and UX in a design system need to be tied to development as much as possible. The tools in this checklist should help designers and developers work better together.
diff --git a/src/data/roadmaps/design-system/content/tooling/development/index.md b/src/data/roadmaps/design-system/content/tooling/development/index.md
deleted file mode 100644
index 78864b924..000000000
--- a/src/data/roadmaps/design-system/content/tooling/development/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Development
-
-One of the main challenges in developing a design system isn’t building the components. It’s making your code stable, easy to read and contribute to.
diff --git a/src/data/roadmaps/design-system/content/tooling@jggrr5nZOe6FY3ZrZJTOw.md b/src/data/roadmaps/design-system/content/tooling@jggrr5nZOe6FY3ZrZJTOw.md
new file mode 100644
index 000000000..ff8ce09b1
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/tooling@jggrr5nZOe6FY3ZrZJTOw.md
@@ -0,0 +1,3 @@
+# Tooling
+
+Design system tooling encompasses technical infrastructure and workflows. Effective tooling should integrate with design tools, provide component libraries for frameworks, implement token management, utilize documentation platforms, establish automated versioning, create testing infrastructure, and enable collaboration workflows.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/core-components/tooltip.md b/src/data/roadmaps/design-system/content/tooltip@2oCAzsk_y2Y2oHUi467dp.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/core-components/tooltip.md
rename to src/data/roadmaps/design-system/content/tooltip@2oCAzsk_y2Y2oHUi467dp.md
diff --git a/src/data/roadmaps/design-system/content/typography@ODQ8zrHc2rsc8PN-APKvz.md b/src/data/roadmaps/design-system/content/typography@ODQ8zrHc2rsc8PN-APKvz.md
new file mode 100644
index 000000000..be41eb295
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/typography@ODQ8zrHc2rsc8PN-APKvz.md
@@ -0,0 +1,3 @@
+# Typography
+
+Typography establishes hierarchy, readability, and brand personality. An effective system should develop harmonious scales using mathematical ratios, choose appropriate typefaces, implement fluid typography, establish consistent line-heights, define font weight hierarchy, ensure accessibility compliance, and provide clear usage guidelines.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/design-system-terminology/ui-kit.md b/src/data/roadmaps/design-system/content/ui-kit@lUObv2N7eH3Jdnwwd5vmI.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-terminology/ui-kit.md
rename to src/data/roadmaps/design-system/content/ui-kit@lUObv2N7eH3Jdnwwd5vmI.md
diff --git a/src/data/roadmaps/design-system/content/design-system-basics/index.md b/src/data/roadmaps/design-system/content/understand-he-basics@uvnV1IjE8RV-FKDxHntUU.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-basics/index.md
rename to src/data/roadmaps/design-system/content/understand-he-basics@uvnV1IjE8RV-FKDxHntUU.md
diff --git a/src/data/roadmaps/design-system/content/tooling/development/unit-testing.md b/src/data/roadmaps/design-system/content/unit-testing@y8No8I0MltA91j4Q2toT0.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/development/unit-testing.md
rename to src/data/roadmaps/design-system/content/unit-testing@y8No8I0MltA91j4Q2toT0.md
diff --git a/src/data/roadmaps/design-system/content/design-tokens/layout/units.md b/src/data/roadmaps/design-system/content/units@wQbMhC7q3qdKYf_pX5qL4.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-tokens/layout/units.md
rename to src/data/roadmaps/design-system/content/units@wQbMhC7q3qdKYf_pX5qL4.md
diff --git a/src/data/roadmaps/design-system/content/usage-guidance@RmSFwKqL9yXXxGKZusKWX.md b/src/data/roadmaps/design-system/content/usage-guidance@RmSFwKqL9yXXxGKZusKWX.md
new file mode 100644
index 000000000..318d54451
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/usage-guidance@RmSFwKqL9yXXxGKZusKWX.md
@@ -0,0 +1,11 @@
+# Usage Guidance
+
+Logo usage guidance provides rules for proper implementation to maintain brand consistency. Effective guidance should establish clear examples of proper usage and mistakes to avoid, define logo variations, specify color requirements, prohibit unauthorized alterations, and include approval processes for new contexts.
+
+Visit the following resources to learn more:
+
+- [@article@Logo Usage Best Practices](https://99designs.com/blog/tips/logo-usage-guidelines/)
+- [@article@Brand Guidelines Development](https://designsystem.digital.gov/design-tokens/logo/)
+- [@article@Trademark and Logo Legal Guidelines](https://www.uspto.gov/trademarks-getting-started/trademark-basics)
+- [@article@Brand Identity Protection](https://www.brandfolder.com/blog/brand-guidelines)
+- [@feed@Explore top posts about Brand Management](https://app.daily.dev/tags/branding?ref=roadmapsh)
diff --git a/src/data/roadmaps/design-system/content/design-language/guidelines/user-onboarding.md b/src/data/roadmaps/design-system/content/user-onboarding@PlW8mHnOTyYnbtl0zUSG9.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/guidelines/user-onboarding.md
rename to src/data/roadmaps/design-system/content/user-onboarding@PlW8mHnOTyYnbtl0zUSG9.md
diff --git a/src/data/roadmaps/design-system/content/tooling/design/version-control.md b/src/data/roadmaps/design-system/content/version-control@CYY6nbQiC2pu5ATWmO6wA.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/tooling/design/version-control.md
rename to src/data/roadmaps/design-system/content/version-control@CYY6nbQiC2pu5ATWmO6wA.md
diff --git a/src/data/roadmaps/design-system/content/vision@cMfsRtvzvDZZJ0TqeUOxm.md b/src/data/roadmaps/design-system/content/vision@cMfsRtvzvDZZJ0TqeUOxm.md
new file mode 100644
index 000000000..8687c7a6d
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/vision@cMfsRtvzvDZZJ0TqeUOxm.md
@@ -0,0 +1,11 @@
+# Vision
+
+Brand vision serves as the foundation for design system decisions, providing purpose and direction. An effective vision should articulate organizational purpose, identify core values, visualize future success, prioritize user needs, clarify brand uniqueness, account for cultural considerations, and connect to measurable goals.
+
+Visit the following resources to learn more:
+
+- [@article@Creating Brand Vision](https://www.interaction-design.org/literature/article/branding-in-ux)
+- [@article@Vision-Driven Design Systems](https://bradfrost.com/blog/post/the-design-system-ecosystem/)
+- [@article@Brand Strategy for Design](https://alistapart.com/article/creating-a-brand-identity/)
+- [@article@Purpose-Driven Design](https://designsystem.digital.gov/design-tokens/brand/)
+- [@feed@Explore top posts about Brand Strategy](https://app.daily.dev/tags/branding?ref=roadmapsh)
diff --git a/src/data/roadmaps/design-system/content/visual-forms@-MrrapoyFWKhSeE2PZ9mb.md b/src/data/roadmaps/design-system/content/visual-forms@-MrrapoyFWKhSeE2PZ9mb.md
new file mode 100644
index 000000000..1c502cd96
--- /dev/null
+++ b/src/data/roadmaps/design-system/content/visual-forms@-MrrapoyFWKhSeE2PZ9mb.md
@@ -0,0 +1,3 @@
+# Visual Forms
+
+Visual forms focus on aesthetic and interactive design aspects of form components. Effective design should establish clear information architecture, create consistent field styling, develop harmonious label positioning, design clear error communication, implement progressive enhancement, prioritize mobile-first design, and ensure cross-platform consistency.
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/content/design-system-basics/what-is-design-system.md b/src/data/roadmaps/design-system/content/what-is-a-design-system@4PrkkoZ5fY-oow0O-bVhu.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-basics/what-is-design-system.md
rename to src/data/roadmaps/design-system/content/what-is-a-design-system@4PrkkoZ5fY-oow0O-bVhu.md
diff --git a/src/data/roadmaps/design-system/content/design-system-basics/atomic-design.md b/src/data/roadmaps/design-system/content/what-is-atomic-design@6r9XbwlBtHmJrhviG2cTD.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-system-basics/atomic-design.md
rename to src/data/roadmaps/design-system/content/what-is-atomic-design@6r9XbwlBtHmJrhviG2cTD.md
diff --git a/src/data/roadmaps/design-system/content/design-language/brand/writing-guidelines.md b/src/data/roadmaps/design-system/content/writing-guidelines@toyNbBB5tbyiJZkzuklIv.md
similarity index 100%
rename from src/data/roadmaps/design-system/content/design-language/brand/writing-guidelines.md
rename to src/data/roadmaps/design-system/content/writing-guidelines@toyNbBB5tbyiJZkzuklIv.md
diff --git a/src/data/roadmaps/design-system/design-system.json b/src/data/roadmaps/design-system/design-system.json
index 34312412a..fa82dbb4c 100644
--- a/src/data/roadmaps/design-system/design-system.json
+++ b/src/data/roadmaps/design-system/design-system.json
@@ -1,8144 +1,6976 @@
{
- "mockup": {
- "controls": {
- "control": [
- {
- "ID": "9122",
- "typeID": "Arrow",
- "zOrder": "0",
- "w": "1",
- "h": "239",
- "measuredW": "150",
- "measuredH": "100",
- "x": "817",
- "y": "2613",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 0,
- "y": 238.85737453330648
- },
- "p1": {
- "x": 0.5696202531645572,
- "y": -9.547097558079946e-19
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9123",
- "typeID": "Arrow",
- "zOrder": "1",
- "w": "254",
- "h": "1",
- "measuredW": "150",
- "measuredH": "100",
- "x": "617",
- "y": "2612",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 253.7747974284025,
- "y": -0.1911648668892667
- },
- "p1": {
- "x": 0.3835837984920354,
- "y": 0.004804079064842176
- },
- "p2": {
- "x": -0.12726614315988627,
- "y": -0.1911648668892667
- }
- }
- },
- {
- "ID": "9124",
- "typeID": "Arrow",
- "zOrder": "2",
- "w": "141",
- "h": "72",
- "measuredW": "150",
- "measuredH": "100",
- "x": "940",
- "y": "2618",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 141,
- "y": 71
- },
- "p1": {
- "x": 0.4909438867647635,
- "y": -0.13610386286861906
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9125",
- "typeID": "Arrow",
- "zOrder": "3",
- "w": "141",
- "h": "42",
- "measuredW": "150",
- "measuredH": "100",
- "x": "932",
- "y": "2566",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 141,
- "y": 0
- },
- "p1": {
- "x": 0.4137225127850132,
- "y": 0.07483568957188338
- },
- "p2": {
- "x": 0,
- "y": 42
- }
- }
- },
- {
- "ID": "9126",
- "typeID": "Arrow",
- "zOrder": "4",
- "w": "4",
- "h": "488",
- "measuredW": "150",
- "measuredH": "100",
- "x": "817",
- "y": "2148",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 4,
- "y": 488
- },
- "p1": {
- "x": 0.5696202531645573,
- "y": -9.547097558079948e-19
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9127",
- "typeID": "TextArea",
- "zOrder": "5",
- "w": "179",
- "h": "245",
- "measuredW": "200",
- "measuredH": "140",
- "x": "520",
- "y": "2557"
- },
- {
- "ID": "9128",
- "typeID": "TextArea",
- "zOrder": "6",
- "w": "133",
- "h": "193",
- "measuredW": "200",
- "measuredH": "140",
- "x": "1069",
- "y": "2397"
- },
- {
- "ID": "9129",
- "typeID": "Arrow",
- "zOrder": "7",
- "w": "225",
- "h": "57",
- "measuredW": "150",
- "measuredH": "100",
- "x": "540",
- "y": "2148",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 224.9665093990128,
- "y": 0.0005471037206916662
- },
- "p1": {
- "x": 0.6677015419641932,
- "y": -0.09117251371209674
- },
- "p2": {
- "x": -0.3055697927708252,
- "y": 57.34253089799313
- }
- }
- },
- {
- "ID": "9130",
- "typeID": "Arrow",
- "zOrder": "8",
- "w": "373",
- "h": "2",
- "measuredW": "150",
- "measuredH": "100",
- "x": "384",
- "y": "2133",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 372.7747974284025,
- "y": -0.1911648668892667
- },
- "p1": {
- "x": 0.38358379849203533,
- "y": 0.004804079064842176
- },
- "p2": {
- "x": 0.0519027656332014,
- "y": -0.1911648668892667
- }
- }
- },
- {
- "ID": "9131",
- "typeID": "TextArea",
- "zOrder": "9",
- "w": "190",
- "h": "247",
- "measuredW": "200",
- "measuredH": "140",
- "x": "499",
- "y": "2211"
- },
- {
- "ID": "9132",
- "typeID": "Arrow",
- "zOrder": "10",
- "w": "205",
- "h": "313",
- "measuredW": "150",
- "measuredH": "100",
- "x": "812",
- "y": "1829",
- "properties": {
- "color": "2848996",
- "direction": "bottom",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 2.3440290410588887,
- "y": 313.14548909543873
- },
- "p1": {
- "x": 0.5983740467924911,
- "y": 0.26381020739309036
- },
- "p2": {
- "x": 204.616587909156,
- "y": 0.42963121347270317
- }
- }
- },
- {
- "ID": "9133",
- "typeID": "Arrow",
- "zOrder": "11",
- "w": "1",
- "h": "98",
- "measuredW": "150",
- "measuredH": "100",
- "x": "1205",
- "y": "1823",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 0,
- "y": 97.50570630909533
- },
- "p1": {
- "x": 0.5696202531645572,
- "y": 0
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9134",
- "typeID": "Arrow",
- "zOrder": "12",
- "w": "1",
- "h": "98",
- "measuredW": "150",
- "measuredH": "100",
- "x": "1034",
- "y": "1823",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 0,
- "y": 97.50570630909533
- },
- "p1": {
- "x": 0.5696202531645572,
- "y": 0
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9135",
- "typeID": "Arrow",
- "zOrder": "13",
- "w": "434",
- "h": "115",
- "measuredW": "150",
- "measuredH": "100",
- "x": "585",
- "y": "1706",
- "properties": {
- "color": "2848996",
- "direction": "bottom",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 0.21579368960033207,
- "y": -0.20847649162965354
- },
- "p1": {
- "x": 0.30218415810388827,
- "y": -0.16098569846591773
- },
- "p2": {
- "x": 434.09845979710815,
- "y": 103.57465610985582
- }
- }
- },
- {
- "ID": "9136",
- "typeID": "Arrow",
- "zOrder": "14",
- "w": "1",
- "h": "98",
- "measuredW": "150",
- "measuredH": "100",
- "x": "493",
- "y": "1708",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 0,
- "y": 97.50570630909533
- },
- "p1": {
- "x": 0.5696202531645572,
- "y": 0
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9137",
- "typeID": "Arrow",
- "zOrder": "15",
- "w": "1",
- "h": "98",
- "measuredW": "150",
- "measuredH": "100",
- "x": "493",
- "y": "1599",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 0,
- "y": 97.50570630909533
- },
- "p1": {
- "x": 0.5696202531645572,
- "y": 0
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9138",
- "typeID": "Arrow",
- "zOrder": "16",
- "w": "78",
- "measuredW": "150",
- "measuredH": "100",
- "x": "290",
- "y": "1598",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 78,
- "y": 99
- },
- "p1": {
- "x": 0.4270235064243003,
- "y": 0.2855704896678307
- },
- "p2": {
- "x": 1,
- "y": 0
- }
- }
- },
- {
- "ID": "9139",
- "typeID": "Arrow",
- "zOrder": "17",
- "w": "123",
- "h": "97",
- "measuredW": "150",
- "measuredH": "100",
- "x": "255",
- "y": "1710",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 123,
- "y": 0
- },
- "p1": {
- "x": 0.5331597295140493,
- "y": -0.24763744802385654
- },
- "p2": {
- "x": 0,
- "y": 97
- }
- }
- },
- {
- "ID": "9140",
- "typeID": "Arrow",
- "zOrder": "18",
- "w": "163",
- "h": "25",
- "measuredW": "150",
- "measuredH": "100",
- "x": "925",
- "y": "1365",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 163,
- "y": 0
- },
- "p1": {
- "x": 0.43967889908256924,
- "y": 0.059403669724772554
- },
- "p2": {
- "x": 0,
- "y": 24
- }
- }
- },
- {
- "ID": "9141",
- "typeID": "Arrow",
- "zOrder": "19",
- "w": "1",
- "h": "98",
- "measuredW": "150",
- "measuredH": "100",
- "x": "806",
- "y": "1381",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 0,
- "y": 97.50570630909533
- },
- "p1": {
- "x": 0.5696202531645572,
- "y": 0
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9142",
- "typeID": "TextArea",
- "zOrder": "20",
- "w": "120",
- "h": "203",
- "measuredW": "200",
- "measuredH": "140",
- "x": "189",
- "y": "1392"
- },
- {
- "ID": "9143",
- "typeID": "Arrow",
- "zOrder": "21",
- "w": "183",
- "h": "294",
- "measuredW": "150",
- "measuredH": "100",
- "x": "578",
- "y": "1404",
- "properties": {
- "color": "2848996",
- "direction": "bottom",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 183,
- "y": 0
- },
- "p1": {
- "x": 0.497454770689608,
- "y": -0.2224265751011547
- },
- "p2": {
- "x": 6.770879405488586,
- "y": 293.89042115201073
- }
- }
- },
- {
- "ID": "9144",
- "typeID": "Arrow",
- "zOrder": "22",
- "w": "209",
- "h": "69",
- "measuredW": "150",
- "measuredH": "100",
- "x": "911",
- "y": "1403",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 209,
- "y": 69
- },
- "p1": {
- "x": 0.3656158645007683,
- "y": -0.144103553238299
- },
- "p2": {
- "x": 0,
- "y": 1
- }
- }
- },
- {
- "ID": "9145",
- "typeID": "TextArea",
- "zOrder": "23",
- "w": "163",
- "h": "262",
- "measuredW": "200",
- "measuredH": "140",
- "x": "1121",
- "y": "1100"
- },
- {
- "ID": "9146",
- "typeID": "Arrow",
- "zOrder": "24",
- "w": "108",
- "h": "304",
- "measuredW": "150",
- "measuredH": "100",
- "x": "786",
- "y": "1069",
- "properties": {
- "color": "2848996",
- "direction": "bottom",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 107.21029252867754,
- "y": -0.1673123886146186
- },
- "p1": {
- "x": 0.5483800113143977,
- "y": 0.1197025215699228
- },
- "p2": {
- "x": 0,
- "y": 304
- }
- }
- },
- {
- "ID": "9147",
- "typeID": "Arrow",
- "zOrder": "25",
- "w": "152",
- "h": "19",
- "measuredW": "150",
- "measuredH": "100",
- "x": "361",
- "y": "711",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 152,
- "y": 17
- },
- "p1": {
- "x": 0.5624761985359454,
- "y": 0.06537468793636021
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9148",
- "typeID": "Arrow",
- "zOrder": "26",
- "w": "157",
- "h": "30",
- "measuredW": "150",
- "measuredH": "100",
- "x": "373",
- "y": "743",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 157,
- "y": 0
- },
- "p1": {
- "x": 0.6288700144819758,
- "y": -0.07558025754432658
- },
- "p2": {
- "x": 0,
- "y": 30
- }
- }
- },
- {
- "ID": "9149",
- "typeID": "Arrow",
- "zOrder": "27",
- "w": "338",
- "h": "320",
- "measuredW": "150",
- "measuredH": "100",
- "x": "555",
- "y": "732",
- "properties": {
- "color": "2848996",
- "direction": "bottom",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.5467512140736054,
- "y": 0.1713049817218941
- },
- "p2": {
- "x": 338.33333333333337,
- "y": 320
- }
- }
- },
- {
- "ID": "9150",
- "typeID": "Arrow",
- "zOrder": "28",
- "w": "280",
- "h": "1",
- "measuredW": "150",
- "measuredH": "100",
- "x": "626",
- "y": "736",
- "properties": {
- "color": "2848996",
- "direction": "bottom",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 280,
- "y": 0
- },
- "p1": {
- "x": 0.3990825688073394,
- "y": 0
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9151",
- "typeID": "Arrow",
- "zOrder": "29",
- "w": "193",
- "h": "57",
- "measuredW": "150",
- "measuredH": "100",
- "x": "964",
- "y": "663",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 193,
- "y": 0
- },
- "p1": {
- "x": 0.43967889908256885,
- "y": 0.059403669724770604
- },
- "p2": {
- "x": 0,
- "y": 57
- }
- }
- },
- {
- "ID": "9152",
- "typeID": "Arrow",
- "zOrder": "30",
- "w": "178",
- "h": "11",
- "measuredW": "150",
- "measuredH": "100",
- "x": "978",
- "y": "721",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 178,
- "y": 1
- },
- "p1": {
- "x": 0.4952865761689297,
- "y": -0.026018099547511303
- },
- "p2": {
- "x": 0,
- "y": 11
- }
- }
- },
- {
- "ID": "9153",
- "typeID": "Arrow",
- "zOrder": "31",
- "w": "185",
- "h": "28",
- "measuredW": "150",
- "measuredH": "100",
- "x": "969",
- "y": "740",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 185,
- "y": 28
- },
- "p1": {
- "x": 0.4773338021448126,
- "y": -0.06587638445889948
- },
- "p2": {
- "x": 0,
- "y": 2
- }
- }
- },
- {
- "ID": "9154",
- "typeID": "Arrow",
- "zOrder": "32",
- "w": "165",
- "h": "74",
- "measuredW": "150",
- "measuredH": "100",
- "x": "991",
- "y": "745",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 165,
- "y": 74
- },
- "p1": {
- "x": 0.42475765267117216,
- "y": -0.0822299012262622
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9155",
- "typeID": "Arrow",
- "zOrder": "33",
- "w": "204",
- "h": "124",
- "measuredW": "150",
- "measuredH": "100",
- "x": "955",
- "y": "744",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 204,
- "y": 124
- },
- "p1": {
- "x": 0.48827905670971367,
- "y": -0.08555586749017406
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9156",
- "typeID": "Arrow",
- "zOrder": "34",
- "w": "219",
- "h": "175",
- "measuredW": "150",
- "measuredH": "100",
- "x": "938",
- "y": "741",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 219,
- "y": 175
- },
- "p1": {
- "x": 0.47850762222278775,
- "y": -0.07881811009594585
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9157",
- "typeID": "Arrow",
- "zOrder": "35",
- "w": "217",
- "h": "217",
- "measuredW": "150",
- "measuredH": "100",
- "x": "940",
- "y": "750",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 217,
- "y": 217
- },
- "p1": {
- "x": 0.5046082949308756,
- "y": -0.06221198156682028
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9158",
- "typeID": "Arrow",
- "zOrder": "36",
- "w": "237",
- "h": "263",
- "measuredW": "150",
- "measuredH": "100",
- "x": "916",
- "y": "746",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 237,
- "y": 263
- },
- "p1": {
- "x": 0.5432497720328272,
- "y": -0.06251899726439393
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9159",
- "typeID": "Arrow",
- "zOrder": "37",
- "w": "208",
- "h": "110",
- "measuredW": "150",
- "measuredH": "100",
- "x": "945",
- "y": "612",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 208,
- "y": 0
- },
- "p1": {
- "x": 0.40717778212399774,
- "y": 0.06499119890475254
- },
- "p2": {
- "x": 0,
- "y": 110
- }
- }
- },
- {
- "ID": "9160",
- "typeID": "Arrow",
- "zOrder": "38",
- "w": "355",
- "h": "61",
- "measuredW": "150",
- "measuredH": "100",
- "x": "467",
- "y": "1075",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 355,
- "y": 0
- },
- "p1": {
- "x": 0.5883979271379048,
- "y": -0.04115949837304429
- },
- "p2": {
- "x": 0,
- "y": 61
- }
- }
- },
- {
- "ID": "9161",
- "typeID": "Arrow",
- "zOrder": "39",
- "w": "159",
- "h": "90",
- "measuredW": "150",
- "measuredH": "100",
- "x": "514",
- "y": "511",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 159,
- "y": 0
- },
- "p1": {
- "x": 0.4552212800557556,
- "y": -0.054942502032756385
- },
- "p2": {
- "x": 0,
- "y": 90
- }
- }
- },
- {
- "ID": "9162",
- "typeID": "Arrow",
- "zOrder": "40",
- "w": "132",
- "h": "98",
- "measuredW": "150",
- "measuredH": "100",
- "x": "674",
- "y": "1077",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 132,
- "y": 0
- },
- "p1": {
- "x": 0.6647493837304848,
- "y": -0.14954806902218587
- },
- "p2": {
- "x": 0,
- "y": 98
- }
- }
- },
- {
- "ID": "9163",
- "typeID": "Arrow",
- "zOrder": "41",
- "w": "382",
- "h": "81",
- "measuredW": "150",
- "measuredH": "100",
- "x": "430",
- "y": "985",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 382,
- "y": 80
- },
- "p1": {
- "x": 0.5801843438985321,
- "y": 0.07961975788450934
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9164",
- "typeID": "Arrow",
- "zOrder": "42",
- "w": "173",
- "h": "66",
- "measuredW": "150",
- "measuredH": "100",
- "x": "645",
- "y": "987",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 173,
- "y": 65
- },
- "p1": {
- "x": 0.5730514727411138,
- "y": 0.15172454178134334
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9165",
- "typeID": "Arrow",
- "zOrder": "43",
- "w": "190",
- "h": "228",
- "measuredW": "150",
- "measuredH": "100",
- "x": "734",
- "y": "511",
- "properties": {
- "color": "2848996",
- "direction": "bottom",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.47179900279163,
- "y": -0.12522048304885122
- },
- "p2": {
- "x": 190,
- "y": 228
- }
- }
- },
- {
- "ID": "9166",
- "typeID": "Arrow",
- "zOrder": "44",
- "w": "162",
- "h": "18",
- "measuredW": "150",
- "measuredH": "100",
- "x": "900",
- "y": "507",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 162,
- "y": 18
- },
- "p1": {
- "x": 0.47465493485460114,
- "y": -0.05218883705189875
- },
- "p2": {
- "x": 0,
- "y": 2
- }
- }
- },
- {
- "ID": "9167",
- "typeID": "Arrow",
- "zOrder": "45",
- "w": "158",
- "h": "27",
- "measuredW": "150",
- "measuredH": "100",
- "x": "904",
- "y": "466",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 158,
- "y": 0
- },
- "p1": {
- "x": 0.4983333333333333,
- "y": 0.07166666666666674
- },
- "p2": {
- "x": 0,
- "y": 25
- }
- }
- },
- {
- "ID": "9168",
- "typeID": "Arrow",
- "zOrder": "46",
- "w": "164",
- "h": "1",
- "measuredW": "150",
- "measuredH": "100",
- "x": "507",
- "y": "500",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 164,
- "y": 0
- },
- "p1": {
- "x": 0.47096774193548385,
- "y": 0
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9169",
- "typeID": "Arrow",
- "zOrder": "47",
- "w": "155",
- "h": "46",
- "measuredW": "150",
- "measuredH": "100",
- "x": "509",
- "y": "509",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 155,
- "y": 0
- },
- "p1": {
- "x": 0.45522128005575563,
- "y": -0.05494250203275639
- },
- "p2": {
- "x": 0,
- "y": 46
- }
- }
- },
- {
- "ID": "9170",
- "typeID": "Arrow",
- "zOrder": "48",
- "w": "24",
- "h": "124",
- "measuredW": "150",
- "measuredH": "100",
- "x": "724",
- "y": "367",
- "properties": {
- "color": "2848996",
- "direction": "bottom",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 24,
- "y": 0
- },
- "p1": {
- "x": 0.5339433105125088,
- "y": -0.12854309296820018
- },
- "p2": {
- "x": 10,
- "y": 124
- }
- }
- },
- {
- "ID": "9171",
- "typeID": "Label",
- "zOrder": "49",
- "measuredW": "215",
- "measuredH": "40",
- "x": "684",
- "y": "312",
- "properties": {
- "size": "32",
- "text": "Design System"
- }
- },
- {
- "ID": "9172",
- "typeID": "Arrow",
- "zOrder": "50",
- "w": "19",
- "h": "80",
- "measuredW": "150",
- "measuredH": "100",
- "x": "791",
- "y": "224",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "direction": "bottom",
- "leftArrow": "false",
- "p0": {
- "x": 17,
- "y": 0
- },
- "p1": {
- "x": 0.4835868694955965,
- "y": 0.10168134507606086
- },
- "p2": {
- "x": 0,
- "y": 79
- },
- "rightArrow": "false",
- "stroke": "dotted"
- }
- },
- {
- "ID": "9179",
- "typeID": "Arrow",
- "zOrder": "53",
- "w": "143",
- "h": "44",
- "measuredW": "150",
- "measuredH": "100",
- "x": "513",
- "y": "448",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "p0": {
- "x": 143,
- "y": 44
- },
- "p1": {
- "x": 0.49336609336609333,
- "y": 0.03292383292383292
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "9180",
- "typeID": "__group__",
- "zOrder": "54",
- "measuredW": "272",
- "measuredH": "50",
- "w": "272",
- "h": "50",
- "x": "642",
- "y": "474",
- "properties": {
- "controlName": "100-design-system-basics"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "272",
- "h": "50",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "176",
- "measuredH": "25",
- "x": "47",
- "y": "13",
- "properties": {
- "size": "17",
- "text": "Understand the Basics"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9181",
- "typeID": "__group__",
- "zOrder": "55",
- "measuredW": "340",
- "measuredH": "44",
- "w": "340",
- "h": "44",
- "x": "187",
- "y": "429",
- "properties": {
- "controlName": "100-design-system-basics:what-is-design-system"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "340",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "189",
- "measuredH": "25",
- "x": "75",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "What is a Design System"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9182",
- "typeID": "__group__",
- "zOrder": "56",
- "measuredW": "340",
- "measuredH": "44",
- "w": "340",
- "h": "44",
- "x": "187",
- "y": "477",
- "properties": {
- "controlName": "101-design-system-basics:need-of-design-system"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "340",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "181",
- "measuredH": "25",
- "x": "79",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Need of Design System"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9183",
- "typeID": "__group__",
- "zOrder": "57",
- "measuredW": "340",
- "measuredH": "44",
- "w": "340",
- "h": "44",
- "x": "187",
- "y": "525",
- "properties": {
- "controlName": "102-design-system-basics:design-system-vs-component-library"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "340",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "287",
- "measuredH": "25",
- "x": "26",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Design System vs Component Library"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9184",
- "typeID": "__group__",
- "zOrder": "58",
- "measuredW": "287",
- "measuredH": "44",
- "w": "287",
- "h": "44",
- "x": "1047",
- "y": "450",
- "properties": {
- "controlName": "105-design-system-basics:stakeholders-involved"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "287",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "169",
- "measuredH": "25",
- "x": "59",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Stakeholders Involved"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9185",
- "typeID": "__group__",
- "zOrder": "59",
- "measuredW": "287",
- "measuredH": "44",
- "w": "287",
- "h": "44",
- "x": "1047",
- "y": "498",
- "properties": {
- "controlName": "106-design-system-basics:design-system-examples"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "287",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "193",
- "measuredH": "25",
- "x": "47",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Design System Examples"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9186",
- "typeID": "__group__",
- "zOrder": "60",
- "measuredW": "258",
- "measuredH": "50",
- "w": "258",
- "h": "50",
- "x": "488",
- "y": "711",
- "properties": {
- "controlName": "102-making-a-design-system"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "258",
- "h": "50",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "189",
- "measuredH": "25",
- "x": "34",
- "y": "13",
- "properties": {
- "size": "17",
- "text": "Making a Design System"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9187",
- "typeID": "__group__",
- "zOrder": "61",
- "measuredW": "250",
- "measuredH": "50",
- "w": "250",
- "h": "50",
- "x": "768",
- "y": "1044",
- "properties": {
- "controlName": "103-existing-design-analysis"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "250",
- "h": "50",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "186",
- "measuredH": "25",
- "x": "32",
- "y": "12",
- "properties": {
- "size": "17",
- "text": "Existing Design Analysis"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9188",
- "typeID": "__group__",
- "zOrder": "62",
- "measuredW": "241",
- "measuredH": "44",
- "w": "241",
- "h": "44",
- "x": "528",
- "y": "956",
- "properties": {
- "controlName": "101-existing-design-analysis:visual-audit"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "241",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "89",
- "measuredH": "25",
- "x": "76",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Visual Audit"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9189",
- "typeID": "__group__",
- "zOrder": "63",
- "measuredW": "267",
- "measuredH": "215",
- "w": "267",
- "h": "215",
- "x": "217",
- "y": "839",
- "properties": {
- "controlName": "102-existing-design-analysis:identify-design-elements"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "267",
- "h": "200",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0"
- },
- {
- "ID": "1",
- "typeID": "TextArea",
- "zOrder": "1",
- "w": "94",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "18",
- "y": "114",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "42",
- "measuredH": "25",
- "x": "44",
- "y": "124",
- "properties": {
- "size": "17",
- "text": "Color"
- }
- },
- {
- "ID": "3",
- "typeID": "TextArea",
- "zOrder": "3",
- "w": "131",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "118",
- "y": "114",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "4",
- "typeID": "Label",
- "zOrder": "4",
- "measuredW": "89",
- "measuredH": "25",
- "x": "139",
- "y": "124",
- "properties": {
- "size": "17",
- "text": "Typography"
- }
- },
- {
- "ID": "5",
- "typeID": "TextArea",
- "zOrder": "5",
- "w": "94",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "19",
- "y": "65",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "6",
- "typeID": "Label",
- "zOrder": "6",
- "measuredW": "46",
- "measuredH": "25",
- "x": "43",
- "y": "75",
- "properties": {
- "size": "17",
- "text": "Sizing"
- }
- },
- {
- "ID": "7",
- "typeID": "TextArea",
- "zOrder": "7",
- "w": "130",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "119",
- "y": "65",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "8",
- "typeID": "Label",
- "zOrder": "8",
- "measuredW": "58",
- "measuredH": "25",
- "x": "155",
- "y": "75",
- "properties": {
- "size": "17",
- "text": "Spaces"
- }
- },
- {
- "ID": "9",
- "typeID": "TextArea",
- "zOrder": "9",
- "w": "94",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "19",
- "y": "16",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "10",
- "typeID": "Label",
- "zOrder": "10",
- "measuredW": "42",
- "measuredH": "25",
- "x": "45",
- "y": "26",
- "properties": {
- "size": "17",
- "text": "Icons"
- }
- },
- {
- "ID": "11",
- "typeID": "TextArea",
- "zOrder": "11",
- "w": "129",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "120",
- "y": "16",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "12",
- "typeID": "Label",
- "zOrder": "12",
- "measuredW": "99",
- "measuredH": "25",
- "x": "135",
- "y": "26",
- "properties": {
- "size": "17",
- "text": "Visual Forms"
- }
- },
- {
- "ID": "13",
- "typeID": "TextArea",
- "zOrder": "13",
- "w": "231",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "18",
- "y": "171",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "14",
- "typeID": "Label",
- "zOrder": "14",
- "measuredW": "192",
- "measuredH": "25",
- "x": "38",
- "y": "180",
- "properties": {
- "size": "17",
- "text": "Identify Design Elements"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9190",
- "typeID": "__group__",
- "zOrder": "64",
- "measuredW": "267",
- "measuredH": "264",
- "w": "267",
- "h": "264",
- "x": "217",
- "y": "1069",
- "properties": {
- "controlName": "103-existing-design-analysis:identify-components"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "267",
- "h": "246",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "18"
- },
- {
- "ID": "1",
- "typeID": "TextArea",
- "zOrder": "1",
- "w": "94",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "18",
- "y": "153",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "46",
- "measuredH": "25",
- "x": "42",
- "y": "163",
- "properties": {
- "size": "17",
- "text": "Cards"
- }
- },
- {
- "ID": "3",
- "typeID": "TextArea",
- "zOrder": "3",
- "w": "131",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "118",
- "y": "153",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "4",
- "typeID": "Label",
- "zOrder": "4",
- "measuredW": "94",
- "measuredH": "25",
- "x": "137",
- "y": "163",
- "properties": {
- "size": "17",
- "text": "Drop Downs"
- }
- },
- {
- "ID": "5",
- "typeID": "TextArea",
- "zOrder": "5",
- "w": "94",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "19",
- "y": "104",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "6",
- "typeID": "Label",
- "zOrder": "6",
- "measuredW": "66",
- "measuredH": "25",
- "x": "33",
- "y": "114",
- "properties": {
- "size": "17",
- "text": "Banners"
- }
- },
- {
- "ID": "7",
- "typeID": "TextArea",
- "zOrder": "7",
- "w": "130",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "119",
- "y": "104",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "8",
- "typeID": "Label",
- "zOrder": "8",
- "measuredW": "60",
- "measuredH": "25",
- "x": "154",
- "y": "114",
- "properties": {
- "size": "17",
- "text": "Buttons"
- }
- },
- {
- "ID": "9",
- "typeID": "TextArea",
- "zOrder": "9",
- "w": "94",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "19",
- "y": "55",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "10",
- "typeID": "Label",
- "zOrder": "10",
- "measuredW": "49",
- "measuredH": "25",
- "x": "45",
- "y": "65",
- "properties": {
- "size": "17",
- "text": "Avatar"
- }
- },
- {
- "ID": "11",
- "typeID": "TextArea",
- "zOrder": "11",
- "w": "129",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "120",
- "y": "55",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "12",
- "typeID": "Label",
- "zOrder": "12",
- "measuredW": "60",
- "measuredH": "25",
- "x": "155",
- "y": "65",
- "properties": {
- "size": "17",
- "text": "Badges"
- }
- },
- {
- "ID": "13",
- "typeID": "TextArea",
- "zOrder": "13",
- "w": "231",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "18",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "14",
- "typeID": "Label",
- "zOrder": "14",
- "measuredW": "159",
- "measuredH": "25",
- "x": "54",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Identify Components"
- }
- },
- {
- "ID": "15",
- "typeID": "TextArea",
- "zOrder": "15",
- "w": "157",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "18",
- "y": "203",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "16",
- "typeID": "Label",
- "zOrder": "16",
- "measuredW": "117",
- "measuredH": "25",
- "x": "38",
- "y": "213",
- "properties": {
- "size": "17",
- "text": "Form Elements"
- }
- },
- {
- "ID": "17",
- "typeID": "TextArea",
- "zOrder": "17",
- "w": "66",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "183",
- "y": "204",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "18",
- "typeID": "Label",
- "zOrder": "18",
- "measuredW": "19",
- "measuredH": "40",
- "x": "206",
- "y": "208",
- "properties": {
- "size": "32",
- "text": "..."
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9191",
- "typeID": "__group__",
- "zOrder": "65",
- "measuredW": "247",
- "measuredH": "44",
- "w": "247",
- "h": "44",
- "x": "508",
- "y": "1150",
- "properties": {
- "controlName": "104-existing-design-analysis:ab-tests-and-experiments"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "247",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "210",
- "measuredH": "25",
- "x": "19",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "A/B Tests and Experiments"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9192",
- "typeID": "__group__",
- "zOrder": "66",
- "measuredW": "241",
- "measuredH": "44",
- "w": "241",
- "h": "44",
- "x": "528",
- "y": "907",
- "properties": {
- "controlName": "100-existing-design-analysis:existing-design-process"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "241",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "186",
- "measuredH": "25",
- "x": "28",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Existing Design Process"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9193",
- "typeID": "__group__",
- "zOrder": "67",
- "measuredW": "340",
- "measuredH": "44",
- "w": "340",
- "h": "44",
- "x": "187",
- "y": "574",
- "properties": {
- "controlName": "103-design-system-basics:atomic-design"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "340",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "172",
- "measuredH": "25",
- "x": "84",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "What is Atomic Design"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9194",
- "typeID": "__group__",
- "zOrder": "68",
- "measuredW": "198",
- "measuredH": "50",
- "w": "198",
- "h": "50",
- "x": "817",
- "y": "711",
- "properties": {
- "controlName": "101-design-system-terminology"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "198",
- "h": "50",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "93",
- "measuredH": "25",
- "x": "52",
- "y": "13",
- "properties": {
- "size": "17",
- "text": "Terminology"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9195",
- "typeID": "__group__",
- "zOrder": "69",
- "measuredW": "192",
- "measuredH": "44",
- "w": "192",
- "h": "44",
- "x": "1142",
- "y": "599",
- "properties": {
- "controlName": "100-design-system-terminology:component"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "192",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "90",
- "measuredH": "25",
- "x": "51",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Component"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9196",
- "typeID": "__group__",
- "zOrder": "70",
- "measuredW": "192",
- "measuredH": "44",
- "w": "192",
- "h": "44",
- "x": "1142",
- "y": "648",
- "properties": {
- "controlName": "101-design-system-terminology:component-library"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "192",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "148",
- "measuredH": "25",
- "x": "22",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Component Library"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9197",
- "typeID": "__group__",
- "zOrder": "71",
- "measuredW": "192",
- "measuredH": "44",
- "w": "192",
- "h": "44",
- "x": "1142",
- "y": "696",
- "properties": {
- "controlName": "102-design-system-terminology:design-language"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "192",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "136",
- "measuredH": "25",
- "x": "28",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Design Language"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9198",
- "typeID": "__group__",
- "zOrder": "72",
- "measuredW": "192",
- "measuredH": "44",
- "w": "192",
- "h": "44",
- "x": "1142",
- "y": "744",
- "properties": {
- "controlName": "103-design-system-terminology:governance"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "192",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "95",
- "measuredH": "25",
- "x": "48",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Governance"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9199",
- "typeID": "__group__",
- "zOrder": "73",
- "measuredW": "192",
- "measuredH": "44",
- "w": "192",
- "h": "44",
- "x": "1142",
- "y": "792",
- "properties": {
- "controlName": "104-design-system-terminology:guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "192",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "82",
- "measuredH": "25",
- "x": "55",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9200",
- "typeID": "__group__",
- "zOrder": "74",
- "measuredW": "192",
- "measuredH": "44",
- "w": "192",
- "h": "44",
- "x": "1142",
- "y": "840",
- "properties": {
- "controlName": "105-design-system-terminology:pattern"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "192",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "56",
- "measuredH": "25",
- "x": "68",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Pattern"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9201",
- "typeID": "__group__",
- "zOrder": "75",
- "measuredW": "192",
- "measuredH": "44",
- "w": "192",
- "h": "44",
- "x": "1142",
- "y": "889",
- "properties": {
- "controlName": "106-design-system-terminology:pilot"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "192",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "34",
- "measuredH": "25",
- "x": "79",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Pilot"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9202",
- "typeID": "__group__",
- "zOrder": "76",
- "measuredW": "192",
- "measuredH": "44",
- "w": "192",
- "h": "44",
- "x": "1142",
- "y": "937",
- "properties": {
- "controlName": "107-design-system-terminology:token"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "192",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "46",
- "measuredH": "25",
- "x": "73",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Token"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9203",
- "typeID": "__group__",
- "zOrder": "77",
- "measuredW": "192",
- "measuredH": "44",
- "w": "192",
- "h": "44",
- "x": "1142",
- "y": "985",
- "properties": {
- "controlName": "108-design-system-terminology:ui-kit"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "192",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "43",
- "measuredH": "25",
- "x": "74",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "UI Kit"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9204",
- "typeID": "__group__",
- "zOrder": "78",
- "measuredW": "247",
- "measuredH": "44",
- "w": "247",
- "h": "44",
- "x": "508",
- "y": "1200",
- "properties": {
- "controlName": "105-existing-design-analysis:regional-requirements"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "247",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "182",
- "measuredH": "25",
- "x": "33",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Regional Requirements"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9205",
- "typeID": "__group__",
- "zOrder": "79",
- "measuredW": "198",
- "measuredH": "44",
- "w": "198",
- "h": "44",
- "x": "187",
- "y": "694",
- "properties": {
- "controlName": "100-making-a-design-system:from-scratch"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "198",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "103",
- "measuredH": "25",
- "x": "39",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "From Scratch"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9206",
- "typeID": "__group__",
- "zOrder": "80",
- "measuredW": "198",
- "measuredH": "44",
- "w": "198",
- "h": "44",
- "x": "187",
- "y": "744",
- "properties": {
- "controlName": "101-making-a-design-system:from-existing-design"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "198",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "163",
- "measuredH": "25",
- "x": "19",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "From Existing Design"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9207",
- "typeID": "__group__",
- "zOrder": "81",
- "measuredW": "247",
- "measuredH": "44",
- "w": "247",
- "h": "44",
- "x": "508",
- "y": "1249",
- "properties": {
- "controlName": "106-existing-design-analysis:documentation"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "247",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "118",
- "measuredH": "25",
- "x": "65",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Documentation"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9208",
- "typeID": "__group__",
- "zOrder": "82",
- "measuredW": "265",
- "measuredH": "50",
- "w": "265",
- "h": "50",
- "x": "671",
- "y": "1372",
- "properties": {
- "controlName": "104-design-language"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "265",
- "h": "50",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "207",
- "measuredH": "25",
- "x": "29",
- "y": "12",
- "properties": {
- "size": "17",
- "text": "Creating Design Language"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9209",
- "typeID": "__group__",
- "zOrder": "83",
- "measuredW": "194",
- "measuredH": "44",
- "w": "194",
- "h": "44",
- "x": "1059",
- "y": "1280",
- "properties": {
- "controlName": "100-design-language:brand:vision"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "194",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "47",
- "measuredH": "25",
- "x": "73",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Vision"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9210",
- "typeID": "__group__",
- "zOrder": "84",
- "measuredW": "195",
- "measuredH": "44",
- "w": "195",
- "h": "44",
- "x": "1058",
- "y": "1230",
- "properties": {
- "controlName": "101-design-language:brand:design-principles"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "195",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "135",
- "measuredH": "25",
- "x": "30",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Design Principles"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9211",
- "typeID": "__group__",
- "zOrder": "85",
- "measuredW": "195",
- "measuredH": "44",
- "w": "195",
- "h": "44",
- "x": "1058",
- "y": "1129",
- "properties": {
- "controlName": "103-design-language:brand:tone-of-voice"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "195",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "104",
- "measuredH": "25",
- "x": "46",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Tone of Voice"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9212",
- "typeID": "__group__",
- "zOrder": "86",
- "measuredW": "195",
- "measuredH": "44",
- "w": "195",
- "h": "44",
- "x": "1058",
- "y": "1181",
- "properties": {
- "controlName": "102-design-language:brand:terminology"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "195",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "93",
- "measuredH": "25",
- "x": "51",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Terminology"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9213",
- "typeID": "__group__",
- "zOrder": "87",
- "measuredW": "195",
- "measuredH": "44",
- "w": "195",
- "h": "44",
- "x": "1058",
- "y": "1080",
- "properties": {
- "controlName": "104-design-language:brand:writing-guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "195",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "141",
- "measuredH": "25",
- "x": "27",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Writing Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9214",
- "typeID": "__group__",
- "zOrder": "88",
- "measuredW": "166",
- "measuredH": "44",
- "w": "166",
- "h": "44",
- "x": "1059",
- "y": "1339",
- "properties": {
- "controlName": "100-design-language:brand"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "166",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "47",
- "measuredH": "25",
- "x": "59",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Brand"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9215",
- "typeID": "TextArea",
- "zOrder": "89",
- "w": "179",
- "h": "255",
- "measuredW": "200",
- "measuredH": "140",
- "x": "1105",
- "y": "1470"
- },
- {
- "ID": "9216",
- "typeID": "__group__",
- "zOrder": "90",
- "measuredW": "310",
- "measuredH": "44",
- "w": "310",
- "h": "44",
- "x": "956",
- "y": "1504",
- "properties": {
- "controlName": "100-design-language:logo:monochrome-version"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "310",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "163",
- "measuredH": "25",
- "x": "73",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Monochrome Version"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9217",
- "typeID": "__group__",
- "zOrder": "91",
- "measuredW": "166",
- "measuredH": "44",
- "w": "166",
- "h": "44",
- "x": "1030",
- "y": "1448",
- "properties": {
- "controlName": "102-design-language:logo"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "166",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "39",
- "measuredH": "25",
- "x": "63",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Logo"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9218",
- "typeID": "__group__",
- "zOrder": "92",
- "measuredW": "310",
- "measuredH": "44",
- "w": "310",
- "h": "44",
- "x": "956",
- "y": "1553",
- "properties": {
- "controlName": "101-design-language:logo:small-use-guidance"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "310",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "156",
- "measuredH": "25",
- "x": "77",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Small Use Guidance"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9219",
- "typeID": "__group__",
- "zOrder": "93",
- "measuredW": "310",
- "measuredH": "44",
- "w": "310",
- "h": "44",
- "x": "956",
- "y": "1602",
- "properties": {
- "controlName": "102-design-language:logo:placement-and-clearance-guidance"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "310",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "261",
- "measuredH": "25",
- "x": "24",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Placement & Clearance Guidance"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9220",
- "typeID": "__group__",
- "zOrder": "94",
- "measuredW": "310",
- "measuredH": "44",
- "w": "310",
- "h": "44",
- "x": "956",
- "y": "1650",
- "properties": {
- "controlName": "103-design-language:logo:usage-guidance"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "310",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "130",
- "measuredH": "25",
- "x": "90",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Usage Guidance"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9221",
- "typeID": "__group__",
- "zOrder": "95",
- "measuredW": "310",
- "measuredH": "44",
- "w": "310",
- "h": "44",
- "x": "956",
- "y": "1698",
- "properties": {
- "controlName": "104-design-language:logo:different-file-formats"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "310",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "166",
- "measuredH": "25",
- "x": "72",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Different File Formats"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9222",
- "typeID": "TextArea",
- "zOrder": "96",
- "w": "140",
- "h": "156",
- "measuredW": "200",
- "measuredH": "140",
- "x": "779",
- "y": "1480"
- },
- {
- "ID": "9223",
- "typeID": "__group__",
- "zOrder": "97",
- "measuredW": "225",
- "measuredH": "44",
- "w": "225",
- "h": "44",
- "x": "678",
- "y": "1512",
- "properties": {
- "controlName": "100-design-language:guidelines:accessibility"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "225",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "94",
- "measuredH": "25",
- "x": "66",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Accessibility"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9224",
- "typeID": "__group__",
- "zOrder": "98",
- "measuredW": "132",
- "measuredH": "44",
- "w": "132",
- "h": "44",
- "x": "725",
- "y": "1458",
- "properties": {
- "controlName": "101-design-language:guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "132",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "82",
- "measuredH": "25",
- "x": "25",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9225",
- "typeID": "__group__",
- "zOrder": "99",
- "measuredW": "225",
- "measuredH": "44",
- "w": "225",
- "h": "44",
- "x": "678",
- "y": "1561",
- "properties": {
- "controlName": "101-design-language:guidelines:user-onboarding"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "225",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "133",
- "measuredH": "25",
- "x": "46",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "User Onboarding"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9226",
- "typeID": "__group__",
- "zOrder": "100",
- "measuredW": "225",
- "measuredH": "44",
- "w": "225",
- "h": "44",
- "x": "678",
- "y": "1610",
- "properties": {
- "controlName": "102-design-language:guidelines:microcopy-guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "225",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "165",
- "measuredH": "25",
- "x": "30",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Microcopy Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9227",
- "typeID": "__group__",
- "zOrder": "101",
- "measuredW": "265",
- "measuredH": "50",
- "w": "265",
- "h": "50",
- "x": "348",
- "y": "1681",
- "properties": {
- "controlName": "105-design-tokens"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "265",
- "h": "50",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "181",
- "measuredH": "25",
- "x": "42",
- "y": "12",
- "properties": {
- "size": "17",
- "text": "Defining Design Tokens"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9228",
- "typeID": "__group__",
- "zOrder": "102",
- "measuredW": "148",
- "measuredH": "44",
- "w": "148",
- "h": "44",
- "x": "232",
- "y": "1570",
- "properties": {
- "controlName": "101-design-tokens:color"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "148",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "42",
- "measuredH": "25",
- "x": "53",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Color"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9229",
- "typeID": "__group__",
- "zOrder": "103",
- "measuredW": "177",
- "measuredH": "44",
- "w": "177",
- "h": "44",
- "x": "205",
- "y": "1417",
- "properties": {
- "controlName": "102-design-tokens:color:functional-colors"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "177",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "135",
- "measuredH": "25",
- "x": "21",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Functional Colors"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9230",
- "typeID": "__group__",
- "zOrder": "104",
- "measuredW": "177",
- "measuredH": "44",
- "w": "177",
- "h": "44",
- "x": "205",
- "y": "1465",
- "properties": {
- "controlName": "101-design-tokens:color:dark-mode"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "177",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "85",
- "measuredH": "25",
- "x": "46",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Dark Mode"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9231",
- "typeID": "__group__",
- "zOrder": "105",
- "measuredW": "177",
- "measuredH": "44",
- "w": "177",
- "h": "44",
- "x": "205",
- "y": "1369",
- "properties": {
- "controlName": "103-design-tokens:color:accessibility"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "177",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "94",
- "measuredH": "25",
- "x": "42",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Accessibility"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9232",
- "typeID": "__group__",
- "zOrder": "106",
- "measuredW": "177",
- "measuredH": "44",
- "w": "177",
- "h": "44",
- "x": "205",
- "y": "1513",
- "properties": {
- "controlName": "100-design-tokens:color:guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "177",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "82",
- "measuredH": "25",
- "x": "48",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9233",
- "typeID": "TextArea",
- "zOrder": "107",
- "w": "87",
- "h": "205",
- "measuredW": "200",
- "measuredH": "140",
- "x": "403",
- "y": "1388"
- },
- {
- "ID": "9234",
- "typeID": "__group__",
- "zOrder": "108",
- "measuredW": "124",
- "measuredH": "44",
- "w": "124",
- "h": "44",
- "x": "421",
- "y": "1570",
- "properties": {
- "controlName": "100-design-tokens:layout"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "124",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "51",
- "measuredH": "25",
- "x": "36",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Layout"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9235",
- "typeID": "__group__",
- "zOrder": "109",
- "measuredW": "123",
- "measuredH": "44",
- "w": "123",
- "h": "44",
- "x": "422",
- "y": "1417",
- "properties": {
- "controlName": "102-design-tokens:layout:grid"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "123",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "33",
- "measuredH": "25",
- "x": "45",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Grid"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9236",
- "typeID": "__group__",
- "zOrder": "110",
- "measuredW": "123",
- "measuredH": "44",
- "w": "123",
- "h": "44",
- "x": "422",
- "y": "1465",
- "properties": {
- "controlName": "101-design-tokens:layout:breakpoints"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "123",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "93",
- "measuredH": "25",
- "x": "15",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Breakpoints"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9237",
- "typeID": "__group__",
- "zOrder": "111",
- "measuredW": "123",
- "measuredH": "44",
- "w": "123",
- "h": "44",
- "x": "422",
- "y": "1369",
- "properties": {
- "controlName": "103-design-tokens:layout:units"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "123",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "40",
- "measuredH": "25",
- "x": "42",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Units"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9238",
- "typeID": "__group__",
- "zOrder": "112",
- "measuredW": "123",
- "measuredH": "44",
- "w": "123",
- "h": "44",
- "x": "422",
- "y": "1513",
- "properties": {
- "controlName": "100-design-tokens:layout:spacing"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "123",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "63",
- "measuredH": "25",
- "x": "30",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Spacing"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9239",
- "typeID": "TextArea",
- "zOrder": "113",
- "w": "125",
- "h": "250",
- "measuredW": "200",
- "measuredH": "140",
- "x": "507",
- "y": "1807"
- },
- {
- "ID": "9240",
- "typeID": "__group__",
- "zOrder": "114",
- "measuredW": "164",
- "measuredH": "44",
- "w": "164",
- "h": "44",
- "x": "451",
- "y": "1890",
- "properties": {
- "controlName": "101-design-tokens:typography:grid-relation"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "164",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "102",
- "measuredH": "25",
- "x": "31",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Grid Relation"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9241",
- "typeID": "__group__",
- "zOrder": "115",
- "measuredW": "164",
- "measuredH": "44",
- "w": "164",
- "h": "44",
- "x": "451",
- "y": "1938",
- "properties": {
- "controlName": "102-design-tokens:typography:readability"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "164",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "86",
- "measuredH": "25",
- "x": "39",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Readability"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9242",
- "typeID": "__group__",
- "zOrder": "116",
- "measuredW": "164",
- "measuredH": "44",
- "w": "164",
- "h": "44",
- "x": "451",
- "y": "1842",
- "properties": {
- "controlName": "100-design-tokens:typography:responsiveness"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "164",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "127",
- "measuredH": "25",
- "x": "18",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Responsiveness"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9243",
- "typeID": "__group__",
- "zOrder": "117",
- "measuredW": "164",
- "measuredH": "44",
- "w": "164",
- "h": "44",
- "x": "451",
- "y": "1986",
- "properties": {
- "controlName": "103-design-tokens:typography:performance"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "164",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "100",
- "measuredH": "25",
- "x": "32",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Performance"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9244",
- "typeID": "__group__",
- "zOrder": "118",
- "measuredW": "164",
- "measuredH": "44",
- "w": "164",
- "h": "44",
- "x": "451",
- "y": "2035",
- "properties": {
- "controlName": "104-design-tokens:typography:guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "164",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "82",
- "measuredH": "25",
- "x": "41",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9245",
- "typeID": "TextArea",
- "zOrder": "119",
- "w": "206",
- "h": "251",
- "measuredW": "200",
- "measuredH": "140",
- "x": "183",
- "y": "1806"
- },
- {
- "ID": "9246",
- "typeID": "__group__",
- "zOrder": "120",
- "measuredW": "153",
- "measuredH": "44",
- "w": "153",
- "h": "44",
- "x": "202",
- "y": "1785",
- "properties": {
- "controlName": "102-design-tokens:iconography"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "153",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "96",
- "measuredH": "25",
- "x": "29",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Iconography"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9247",
- "typeID": "__group__",
- "zOrder": "121",
- "measuredW": "89",
- "measuredH": "44",
- "w": "89",
- "h": "44",
- "x": "332",
- "y": "1840",
- "properties": {
- "controlName": "101-design-tokens:iconography:style"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "89",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "37",
- "measuredH": "25",
- "x": "26",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Style"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9248",
- "typeID": "__group__",
- "zOrder": "122",
- "measuredW": "88",
- "measuredH": "44",
- "w": "88",
- "h": "44",
- "x": "197",
- "y": "1887",
- "properties": {
- "controlName": "102-design-tokens:iconography:naming"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "88",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "60",
- "measuredH": "25",
- "x": "14",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Naming"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9249",
- "typeID": "__group__",
- "zOrder": "123",
- "measuredW": "126",
- "measuredH": "44",
- "w": "126",
- "h": "44",
- "x": "197",
- "y": "1839",
- "properties": {
- "controlName": "100-design-tokens:iconography:accessibility"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "126",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "94",
- "measuredH": "25",
- "x": "16",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Accessibility"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9250",
- "typeID": "__group__",
- "zOrder": "124",
- "measuredW": "224",
- "measuredH": "44",
- "w": "224",
- "h": "44",
- "x": "197",
- "y": "1983",
- "properties": {
- "controlName": "106-design-tokens:iconography:reserved-icons"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "224",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "122",
- "measuredH": "25",
- "x": "51",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Reserved Icons"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9251",
- "typeID": "__group__",
- "zOrder": "125",
- "measuredW": "224",
- "measuredH": "44",
- "w": "224",
- "h": "44",
- "x": "197",
- "y": "2032",
- "properties": {
- "controlName": "107-design-tokens:iconography:guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "224",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "82",
- "measuredH": "25",
- "x": "71",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9252",
- "typeID": "__group__",
- "zOrder": "126",
- "measuredW": "131",
- "measuredH": "44",
- "w": "131",
- "h": "44",
- "x": "290",
- "y": "1887",
- "properties": {
- "controlName": "103-design-tokens:iconography:grid-relation"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "131",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "102",
- "measuredH": "25",
- "x": "15",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Grid Relation"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9253",
- "typeID": "__group__",
- "zOrder": "127",
- "measuredW": "88",
- "measuredH": "44",
- "w": "88",
- "h": "44",
- "x": "197",
- "y": "1935",
- "properties": {
- "controlName": "104-design-tokens:iconography:sizes"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "88",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "41",
- "measuredH": "25",
- "x": "23",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Sizes"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9254",
- "typeID": "__group__",
- "zOrder": "128",
- "measuredW": "131",
- "measuredH": "44",
- "w": "131",
- "h": "44",
- "x": "290",
- "y": "1935",
- "properties": {
- "controlName": "105-design-tokens:iconography:keywords"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "131",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "74",
- "measuredH": "25",
- "x": "29",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Keywords"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9255",
- "typeID": "__group__",
- "zOrder": "129",
- "measuredW": "129",
- "measuredH": "44",
- "w": "129",
- "h": "44",
- "x": "451",
- "y": "1787",
- "properties": {
- "controlName": "103-design-tokens:typography"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "129",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "89",
- "measuredH": "25",
- "x": "20",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Typography"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9256",
- "typeID": "__group__",
- "zOrder": "130",
- "measuredW": "336",
- "measuredH": "50",
- "w": "336",
- "h": "50",
- "x": "957",
- "y": "1796",
- "properties": {
- "controlName": "106-core-components"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "336",
- "h": "50",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "212",
- "measuredH": "25",
- "x": "62",
- "y": "12",
- "properties": {
- "size": "17",
- "text": "Creating Core Components"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9257",
- "typeID": "__group__",
- "zOrder": "131",
- "measuredW": "155",
- "measuredH": "44",
- "w": "155",
- "h": "44",
- "x": "957",
- "y": "1889",
- "properties": {
- "controlName": "100-core-components:avatar"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "155",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "49",
- "measuredH": "25",
- "x": "53",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Avatar"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9258",
- "typeID": "__group__",
- "zOrder": "132",
- "measuredW": "155",
- "measuredH": "44",
- "w": "155",
- "h": "44",
- "x": "957",
- "y": "1985",
- "properties": {
- "controlName": "102-core-components:badge"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "155",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "51",
- "measuredH": "25",
- "x": "52",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Badge"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9259",
- "typeID": "__group__",
- "zOrder": "133",
- "measuredW": "155",
- "measuredH": "44",
- "w": "155",
- "h": "44",
- "x": "957",
- "y": "1937",
- "properties": {
- "controlName": "101-core-components:banner"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "155",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "57",
- "measuredH": "25",
- "x": "49",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Banner"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9260",
- "typeID": "__group__",
- "zOrder": "134",
- "measuredW": "155",
- "measuredH": "44",
- "w": "155",
- "h": "44",
- "x": "957",
- "y": "2034",
- "properties": {
- "controlName": "103-core-components:button"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "155",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "51",
- "measuredH": "25",
- "x": "52",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Button"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9261",
- "typeID": "__group__",
- "zOrder": "135",
- "measuredW": "155",
- "measuredH": "44",
- "w": "155",
- "h": "44",
- "x": "957",
- "y": "2083",
- "properties": {
- "controlName": "104-core-components:card"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "155",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "38",
- "measuredH": "25",
- "x": "59",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Card"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9262",
- "typeID": "__group__",
- "zOrder": "136",
- "measuredW": "155",
- "measuredH": "44",
- "w": "155",
- "h": "44",
- "x": "957",
- "y": "2131",
- "properties": {
- "controlName": "105-core-components:carousel"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "155",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "69",
- "measuredH": "25",
- "x": "43",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Carousel"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9263",
- "typeID": "__group__",
- "zOrder": "137",
- "measuredW": "155",
- "measuredH": "44",
- "w": "155",
- "h": "44",
- "x": "957",
- "y": "2179",
- "properties": {
- "controlName": "106-core-components:dropdown"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "155",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "78",
- "measuredH": "25",
- "x": "39",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Dropdown"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9264",
- "typeID": "__group__",
- "zOrder": "138",
- "measuredW": "156",
- "measuredH": "44",
- "w": "156",
- "h": "44",
- "x": "957",
- "y": "2228",
- "properties": {
- "controlName": "107-core-components:icon"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "156",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "34",
- "measuredH": "25",
- "x": "61",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Icon"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9265",
- "typeID": "__group__",
- "zOrder": "139",
- "measuredW": "156",
- "measuredH": "44",
- "w": "156",
- "h": "44",
- "x": "957",
- "y": "2277",
- "properties": {
- "controlName": "108-core-components:input-checkbox"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "156",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "120",
- "measuredH": "25",
- "x": "18",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Input Checkbox"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9266",
- "typeID": "__group__",
- "zOrder": "140",
- "measuredW": "156",
- "measuredH": "44",
- "w": "156",
- "h": "44",
- "x": "957",
- "y": "2326",
- "properties": {
- "controlName": "109-core-components:input-radio"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "156",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "90",
- "measuredH": "25",
- "x": "33",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Input Radio"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9267",
- "typeID": "__group__",
- "zOrder": "141",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1119",
- "y": "1890",
- "properties": {
- "controlName": "110-core-components:input-text"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "75",
- "measuredH": "25",
- "x": "49",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Input Text"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9268",
- "typeID": "__group__",
- "zOrder": "142",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1119",
- "y": "1938",
- "properties": {
- "controlName": "111-core-components:input-switch"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "93",
- "measuredH": "25",
- "x": "40",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Input Switch"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9269",
- "typeID": "__group__",
- "zOrder": "143",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1119",
- "y": "2083",
- "properties": {
- "controlName": "114-core-components:list"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "28",
- "measuredH": "25",
- "x": "73",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "List"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9270",
- "typeID": "__group__",
- "zOrder": "144",
- "measuredW": "175",
- "measuredH": "44",
- "w": "175",
- "h": "44",
- "x": "1118",
- "y": "2131",
- "properties": {
- "controlName": "115-core-components:loading-indicator"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "175",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "135",
- "measuredH": "25",
- "x": "20",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Loading Indicator"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9271",
- "typeID": "__group__",
- "zOrder": "145",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1119",
- "y": "2179",
- "properties": {
- "controlName": "116-core-components:modal"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "48",
- "measuredH": "25",
- "x": "63",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Modal"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9272",
- "typeID": "__group__",
- "zOrder": "146",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1119",
- "y": "2228",
- "properties": {
- "controlName": "117-core-components:tabs"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "37",
- "measuredH": "25",
- "x": "68",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Tabs"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9273",
- "typeID": "__group__",
- "zOrder": "147",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1119",
- "y": "2277",
- "properties": {
- "controlName": "118-core-components:toast"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "42",
- "measuredH": "25",
- "x": "66",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Toast"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9274",
- "typeID": "__group__",
- "zOrder": "148",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1119",
- "y": "2326",
- "properties": {
- "controlName": "119-core-components:tooltip"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "51",
- "measuredH": "25",
- "x": "61",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Tooltip"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9275",
- "typeID": "__group__",
- "zOrder": "149",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1119",
- "y": "1986",
- "properties": {
- "controlName": "112-core-components:select"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "49",
- "measuredH": "25",
- "x": "62",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Select"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9276",
- "typeID": "__group__",
- "zOrder": "150",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1119",
- "y": "2035",
- "properties": {
- "controlName": "113-core-components:textarea"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "67",
- "measuredH": "25",
- "x": "53",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Textarea"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9277",
- "typeID": "__group__",
- "zOrder": "151",
- "measuredW": "179",
- "measuredH": "50",
- "w": "179",
- "h": "50",
- "x": "682",
- "y": "2118",
- "properties": {
- "controlName": "107-tooling"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "179",
- "h": "50",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "55",
- "measuredH": "25",
- "x": "62",
- "y": "12",
- "properties": {
- "size": "17",
- "text": "Tooling"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9278",
- "typeID": "__group__",
- "zOrder": "152",
- "measuredW": "164",
- "measuredH": "44",
- "w": "164",
- "h": "44",
- "x": "461",
- "y": "2193",
- "properties": {
- "controlName": "101-tooling:design"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "164",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "55",
- "measuredH": "25",
- "x": "54",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Design"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9279",
- "typeID": "__group__",
- "zOrder": "153",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "461",
- "y": "2246",
- "properties": {
- "controlName": "100-tooling:design:design-editor"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "105",
- "measuredH": "25",
- "x": "53",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Design Editor"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9280",
- "typeID": "__group__",
- "zOrder": "154",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "461",
- "y": "2296",
- "properties": {
- "controlName": "101-tooling:design:plugins"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "56",
- "measuredH": "25",
- "x": "78",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Plugins"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9281",
- "typeID": "__group__",
- "zOrder": "155",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "461",
- "y": "2346",
- "properties": {
- "controlName": "102-tooling:design:version-control"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "118",
- "measuredH": "25",
- "x": "47",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Version Control"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9282",
- "typeID": "__group__",
- "zOrder": "156",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "461",
- "y": "2396",
- "properties": {
- "controlName": "103-tooling:design:contribution-guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "181",
- "measuredH": "25",
- "x": "15",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Contribution Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9283",
- "typeID": "TextArea",
- "zOrder": "157",
- "w": "161",
- "h": "546",
- "measuredW": "200",
- "measuredH": "140",
- "x": "193",
- "y": "2142"
- },
- {
- "ID": "9284",
- "typeID": "__group__",
- "zOrder": "158",
- "measuredW": "164",
- "measuredH": "44",
- "w": "164",
- "h": "44",
- "x": "263",
- "y": "2121",
- "properties": {
- "controlName": "100-tooling:development"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "164",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "103",
- "measuredH": "25",
- "x": "30",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Development"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9285",
- "typeID": "__group__",
- "zOrder": "159",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2174",
- "properties": {
- "controlName": "100-tooling:development:component-catalog"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "154",
- "measuredH": "25",
- "x": "29",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Component Catalog"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9286",
- "typeID": "__group__",
- "zOrder": "160",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2224",
- "properties": {
- "controlName": "101-tooling:development:documentation"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "118",
- "measuredH": "25",
- "x": "47",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Documentation"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9287",
- "typeID": "__group__",
- "zOrder": "161",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2274",
- "properties": {
- "controlName": "102-tooling:development:code-style"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "83",
- "measuredH": "25",
- "x": "64",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Code Style"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9288",
- "typeID": "__group__",
- "zOrder": "162",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2324",
- "properties": {
- "controlName": "103-tooling:development:unit-testing"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "91",
- "measuredH": "25",
- "x": "60",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Unit Testing"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9289",
- "typeID": "__group__",
- "zOrder": "163",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2375",
- "properties": {
- "controlName": "104-tooling:development:accessibility-testing"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "152",
- "measuredH": "25",
- "x": "30",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Accessibility Testing"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9290",
- "typeID": "__group__",
- "zOrder": "164",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2426",
- "properties": {
- "controlName": "105-tooling:development:semantic-versioning"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "157",
- "measuredH": "25",
- "x": "27",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Semantic Versioning"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9291",
- "typeID": "__group__",
- "zOrder": "165",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2477",
- "properties": {
- "controlName": "106-tooling:development:release-strategy"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "132",
- "measuredH": "25",
- "x": "40",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Release Strategy"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9292",
- "typeID": "__group__",
- "zOrder": "166",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2527",
- "properties": {
- "controlName": "107-tooling:development:commit-guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "146",
- "measuredH": "25",
- "x": "33",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Commit Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9293",
- "typeID": "__group__",
- "zOrder": "167",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2579",
- "properties": {
- "controlName": "108-tooling:development:pr-templates"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "107",
- "measuredH": "25",
- "x": "52",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "PR Templates"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9294",
- "typeID": "__group__",
- "zOrder": "168",
- "measuredW": "212",
- "measuredH": "44",
- "w": "212",
- "h": "44",
- "x": "212",
- "y": "2629",
- "properties": {
- "controlName": "109-tooling:development:contribution-guidelines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "212",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "181",
- "measuredH": "25",
- "x": "15",
- "y": "10",
- "properties": {
- "size": "17",
- "text": "Contribution Guidelines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9295",
- "typeID": "__group__",
- "zOrder": "169",
- "measuredW": "219",
- "measuredH": "50",
- "w": "219",
- "h": "50",
- "x": "751",
- "y": "2587",
- "properties": {
- "controlName": "108-project-management"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "219",
- "h": "50",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "162",
- "measuredH": "25",
- "x": "29",
- "y": "12",
- "properties": {
- "size": "17",
- "text": "Project Management"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9296",
- "typeID": "__group__",
- "zOrder": "170",
- "measuredW": "187",
- "measuredH": "44",
- "w": "187",
- "h": "44",
- "x": "1080",
- "y": "2564",
- "properties": {
- "controlName": "100-project-management:task-management"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "187",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "142",
- "measuredH": "25",
- "x": "23",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Task Management"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9297",
- "typeID": "__group__",
- "zOrder": "171",
- "measuredW": "190",
- "measuredH": "44",
- "w": "190",
- "h": "44",
- "x": "1079",
- "y": "2409",
- "properties": {
- "controlName": "102-project-management:task-management:roadmap"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "190",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "75",
- "measuredH": "25",
- "x": "57",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Roadmap"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9298",
- "typeID": "__group__",
- "zOrder": "172",
- "measuredW": "190",
- "measuredH": "44",
- "w": "190",
- "h": "44",
- "x": "1079",
- "y": "2460",
- "properties": {
- "controlName": "101-project-management:task-management:milestones"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "190",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "84",
- "measuredH": "25",
- "x": "53",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Milestones"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9299",
- "typeID": "__group__",
- "zOrder": "173",
- "measuredW": "190",
- "measuredH": "44",
- "w": "190",
- "h": "44",
- "x": "1079",
- "y": "2510",
- "properties": {
- "controlName": "100-project-management:task-management:ticketing"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "190",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "70",
- "measuredH": "25",
- "x": "60",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Ticketing"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9300",
- "typeID": "__group__",
- "zOrder": "174",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "506",
- "y": "2537",
- "properties": {
- "controlName": "101-project-management:communications"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "129",
- "measuredH": "25",
- "x": "22",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Communications"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9301",
- "typeID": "__group__",
- "zOrder": "175",
- "measuredW": "222",
- "measuredH": "44",
- "w": "222",
- "h": "44",
- "x": "459",
- "y": "2593",
- "properties": {
- "controlName": "100-project-management:communications:community-meetings"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "222",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "162",
- "measuredH": "25",
- "x": "31",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Community Meetings"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9302",
- "typeID": "__group__",
- "zOrder": "176",
- "measuredW": "222",
- "measuredH": "44",
- "w": "222",
- "h": "44",
- "x": "459",
- "y": "2643",
- "properties": {
- "controlName": "101-project-management:communications:communication-channel"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "222",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "189",
- "measuredH": "25",
- "x": "17",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Communication Channel"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9303",
- "typeID": "__group__",
- "zOrder": "177",
- "measuredW": "222",
- "measuredH": "44",
- "w": "222",
- "h": "44",
- "x": "459",
- "y": "2693",
- "properties": {
- "controlName": "102-project-management:communications:open-hours"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "222",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "94",
- "measuredH": "25",
- "x": "65",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Open Hours"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9304",
- "typeID": "__group__",
- "zOrder": "178",
- "measuredW": "222",
- "measuredH": "44",
- "w": "222",
- "h": "44",
- "x": "459",
- "y": "2743",
- "properties": {
- "controlName": "103-project-management:communications:faqs"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "222",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "41",
- "measuredH": "25",
- "x": "91",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "FAQs"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9305",
- "typeID": "TextArea",
- "zOrder": "179",
- "w": "179",
- "h": "245",
- "measuredW": "200",
- "measuredH": "140",
- "x": "1068",
- "y": "2654"
- },
- {
- "ID": "9306",
- "typeID": "__group__",
- "zOrder": "180",
- "measuredW": "174",
- "measuredH": "44",
- "w": "174",
- "h": "44",
- "x": "1088",
- "y": "2634",
- "properties": {
- "controlName": "102-project-management:analytics"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "174",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "68",
- "measuredH": "25",
- "x": "53",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Analytics"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9307",
- "typeID": "__group__",
- "zOrder": "181",
- "measuredW": "246",
- "measuredH": "44",
- "w": "246",
- "h": "44",
- "x": "1087",
- "y": "2690",
- "properties": {
- "controlName": "100-project-management:analytics:component-analytics"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "246",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "163",
- "measuredH": "25",
- "x": "41",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Component Analytics"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9308",
- "typeID": "__group__",
- "zOrder": "182",
- "measuredW": "246",
- "measuredH": "44",
- "w": "246",
- "h": "44",
- "x": "1087",
- "y": "2740",
- "properties": {
- "controlName": "101-project-management:analytics:error-logging"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "246",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "106",
- "measuredH": "25",
- "x": "70",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Error Logging"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9309",
- "typeID": "__group__",
- "zOrder": "183",
- "measuredW": "246",
- "measuredH": "44",
- "w": "246",
- "h": "44",
- "x": "1087",
- "y": "2790",
- "properties": {
- "controlName": "102-project-management:analytics:tooling-analytics"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "246",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "128",
- "measuredH": "25",
- "x": "59",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Tooling Analytics"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9310",
- "typeID": "__group__",
- "zOrder": "184",
- "measuredW": "246",
- "measuredH": "44",
- "w": "246",
- "h": "44",
- "x": "1087",
- "y": "2840",
- "properties": {
- "controlName": "103-project-management:analytics:service-and-health-metrics"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "TextArea",
- "zOrder": "0",
- "w": "246",
- "h": "44",
- "measuredW": "200",
- "measuredH": "140",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "209",
- "measuredH": "25",
- "x": "18",
- "y": "9",
- "properties": {
- "size": "17",
- "text": "Service and Health Metrics"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9311",
- "typeID": "Label",
- "zOrder": "185",
- "measuredW": "161",
- "measuredH": "32",
- "x": "738",
- "y": "2874",
- "properties": {
- "size": "24",
- "text": "Design System"
- }
- },
- {
- "ID": "9312",
- "typeID": "Arrow",
- "zOrder": "186",
- "w": "1",
- "h": "75",
- "measuredW": "150",
- "measuredH": "100",
- "x": "818",
- "y": "2930",
- "properties": {
- "color": "2848996",
- "curvature": "-1",
- "leftArrow": "false",
- "rightArrow": "false",
- "p0": {
- "x": 0,
- "y": 75
- },
- "p1": {
- "x": 0.5696202531645572,
- "y": -9.547097558079946e-19
- },
- "p2": {
- "x": 0,
- "y": 0
- },
- "stroke": "dotted"
- }
- },
- {
- "ID": "9315",
- "typeID": "__group__",
- "zOrder": "52",
- "measuredW": "373",
- "measuredH": "151",
- "w": "373",
- "h": "151",
- "x": "187",
- "y": "209",
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "373",
- "h": "151",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0"
- },
- {
- "ID": "1",
- "typeID": "__group__",
- "zOrder": "1",
- "measuredW": "211",
- "measuredH": "25",
- "w": "211",
- "h": "25",
- "x": "26",
- "y": "68",
- "properties": {
- "controlName": "ext_link:designsystemchecklist.com"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Label",
- "zOrder": "0",
- "measuredW": "178",
- "measuredH": "24",
- "x": "33",
- "y": "0",
- "properties": {
- "size": "16",
- "text": "Design System Checklist"
- }
- },
- {
- "ID": "1",
- "typeID": "Icon",
- "zOrder": "1",
- "measuredW": "24",
- "measuredH": "24",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16777215",
- "icon": {
- "ID": "circle",
- "size": "small"
- }
- }
- },
- {
- "ID": "2",
- "typeID": "Icon",
- "zOrder": "2",
- "measuredW": "24",
- "measuredH": "24",
- "x": "0",
- "y": "1",
- "properties": {
- "icon": {
- "ID": "check-circle",
- "size": "small"
- },
- "color": "10066329"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "243",
- "measuredH": "28",
- "x": "28",
- "y": "27",
- "properties": {
- "size": "20",
- "text": "Recommended Resources"
- }
- },
- {
- "ID": "3",
- "typeID": "__group__",
- "zOrder": "3",
- "measuredW": "286",
- "measuredH": "25",
- "w": "286",
- "h": "25",
- "x": "26",
- "y": "97",
- "properties": {
- "controlName": "ext_link:designbetter.co/design-systems-handbook/introducing-design-systems"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Label",
- "zOrder": "0",
- "measuredW": "253",
- "measuredH": "24",
- "x": "33",
- "y": "0",
- "properties": {
- "size": "16",
- "text": "Invision Design Systems Handbook"
- }
- },
- {
- "ID": "1",
- "typeID": "Icon",
- "zOrder": "1",
- "measuredW": "24",
- "measuredH": "24",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16777215",
- "icon": {
- "ID": "circle",
- "size": "small"
- }
- }
- },
- {
- "ID": "2",
- "typeID": "Icon",
- "zOrder": "2",
- "measuredW": "24",
- "measuredH": "24",
- "x": "0",
- "y": "1",
- "properties": {
- "icon": {
- "ID": "check-circle",
- "size": "small"
- },
- "color": "10066329"
- }
- }
- ]
- }
- }
- }
- ]
- }
- }
- },
- {
- "ID": "9316",
- "typeID": "__group__",
- "zOrder": "51",
- "measuredW": "350",
- "measuredH": "141",
- "w": "350",
- "h": "141",
- "x": "999",
- "y": "219",
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "350",
- "h": "141",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0"
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "314",
- "measuredH": "25",
- "x": "14",
- "y": "17",
- "properties": {
- "size": "17",
- "text": "Find the detailed version of this roadmap"
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "319",
- "measuredH": "25",
- "x": "14",
- "y": "45",
- "properties": {
- "size": "17",
- "text": "along with resources and other roadmaps"
- }
- },
- {
- "ID": "3",
- "typeID": "__group__",
- "zOrder": "3",
- "measuredW": "320",
- "measuredH": "45",
- "w": "320",
- "h": "45",
- "x": "15",
- "y": "81",
- "properties": {
- "controlName": "ext_link:roadmap.sh"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "320",
- "h": "45",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "borderColor": "4273622",
- "color": "4273622"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "105",
- "measuredH": "28",
- "x": "141",
- "y": "8",
- "properties": {
- "color": "16777215",
- "size": "20",
- "text": "roadmap.sh"
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "45",
- "measuredH": "28",
- "x": "66",
- "y": "8",
- "properties": {
- "color": "16777215",
- "size": "20",
- "text": "https"
- }
- },
- {
- "ID": "3",
- "typeID": "Label",
- "zOrder": "3",
- "measuredW": "5",
- "measuredH": "28",
- "x": "113",
- "y": "8",
- "properties": {
- "bold": "true",
- "color": "16777215",
- "size": "20",
- "text": ":"
- }
- },
- {
- "ID": "4",
- "typeID": "Label",
- "zOrder": "4",
- "measuredW": "10",
- "measuredH": "28",
- "x": "120",
- "y": "9",
- "properties": {
- "color": "16777215",
- "size": "20",
- "text": "/"
- }
- },
- {
- "ID": "5",
- "typeID": "Label",
- "zOrder": "5",
- "measuredW": "10",
- "measuredH": "28",
- "x": "128",
- "y": "9",
- "properties": {
- "color": "16777215",
- "size": "20",
- "text": "/"
- }
- }
- ]
- }
- }
- }
- ]
- }
- }
+ "nodes": [
+ {
+ "id": "oHZ5JbApDEfh0_af8h1He",
+ "type": "section",
+ "position": {
+ "x": -23.638187271993502,
+ "y": 2765.9551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
}
- ]
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 373,
+ "height": 228
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -23.638187271993502,
+ "y": 2765.9551467174065
+ }
},
- "attributes": {
- "name": "New Wireframe 1 copy",
- "order": 1000010.2336643032,
- "parentID": null,
- "notes": ""
+ {
+ "id": "w5aUEG9HC-XmarfhsTNaV",
+ "type": "section",
+ "position": {
+ "x": -24.638187271993502,
+ "y": 2542.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ }
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 375,
+ "height": 227
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -24.638187271993502,
+ "y": 2542.4551467174065
+ }
},
- "branchID": "Master",
- "resourceID": "D5E1AC09-3023-4145-A52A-4D904363A065",
- "mockupH": "2796",
- "mockupW": "1166",
- "measuredW": "1349",
- "measuredH": "3005",
- "version": "1.0"
- },
- "groupOffset": {
- "x": 0,
- "y": 0
- },
- "dependencies": [],
- "projectID": "file:///Users/kamrify/Desktop/New%20Roadmaps/New%20Project%201.bmpr"
+ {
+ "id": "9z_V6GT_k0CUpi_RNa91F",
+ "type": "horizontal",
+ "position": {
+ "x": -455.6381872719935,
+ "y": 2040.7548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "horizontal node",
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.65,
+ "stroke": "#2B78E4"
+ }
+ },
+ "zIndex": 999,
+ "width": 50,
+ "height": 20,
+ "style": {},
+ "measured": {
+ "width": 97,
+ "height": 20
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -455.6381872719935,
+ "y": 2040.7548214022336
+ }
+ },
+ {
+ "id": "21pccUw8Y00FpFjxJXFsS",
+ "type": "section",
+ "position": {
+ "x": -711.6381872719935,
+ "y": 1827.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ }
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 256,
+ "height": 275
+ },
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -711.6381872719935,
+ "y": 1827.4551467174065
+ }
+ },
+ {
+ "id": "D-p4-EZLTiY15S078aSfD",
+ "type": "horizontal",
+ "position": {
+ "x": -168.1661509129056,
+ "y": 1858.7548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "horizontal node",
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2B78E4"
+ }
+ },
+ "zIndex": 999,
+ "width": 50,
+ "height": 20,
+ "style": {},
+ "measured": {
+ "width": 117,
+ "height": 20
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -168.1661509129056,
+ "y": 1858.7548214022338
+ }
+ },
+ {
+ "id": "IwYCGqNQKMDLJy11ozOA1",
+ "type": "vertical",
+ "position": {
+ "x": -246.3175069304428,
+ "y": 1313.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "vertical node",
+ "style": {
+ "stroke": "#2B78E4",
+ "strokeWidth": 3.65
+ }
+ },
+ "zIndex": 999,
+ "width": 20,
+ "height": 150,
+ "style": {},
+ "measured": {
+ "width": 20,
+ "height": 1566
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -246.3175069304428,
+ "y": 1313.4551467174065
+ }
+ },
+ {
+ "id": "C6u3MfTH06l-FQrF2Fl2L",
+ "type": "horizontal",
+ "position": {
+ "x": -180.55263821186702,
+ "y": 1267.296264330049
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "horizontal node",
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2B78E4"
+ }
+ },
+ "zIndex": 999,
+ "width": 50,
+ "height": 20,
+ "measured": {
+ "width": 129,
+ "height": 20
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -180.55263821186702,
+ "y": 1267.296264330049
+ }
+ },
+ {
+ "id": "wXJmQeb9VnDhWOPow0DQ_",
+ "type": "section",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 1556.6400192507067
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ }
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 375,
+ "height": 228
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 1556.6400192507067
+ }
+ },
+ {
+ "id": "Iy-XknF5sqjWIYF1MWaat",
+ "type": "horizontal",
+ "position": {
+ "x": -450.4579568300146,
+ "y": 997.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "horizontal node",
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2B78E4"
+ }
+ },
+ "zIndex": 999,
+ "width": 50,
+ "height": 20,
+ "measured": {
+ "width": 128,
+ "height": 20
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -450.4579568300146,
+ "y": 997.4393516042962
+ }
+ },
+ {
+ "id": "dWZ4Tbbb1lsfHP1qy0Z9Z",
+ "type": "section",
+ "position": {
+ "x": -711.6381872719935,
+ "y": 858.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#fafafa",
+ "borderColor": "#000000"
+ }
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 239,
+ "height": 334
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -711.6381872719935,
+ "y": 858.400748222349
+ }
+ },
+ {
+ "id": "OjpMq77qldn4SwOFCDXhd",
+ "type": "horizontal",
+ "position": {
+ "x": -132.6381872719935,
+ "y": 690.9393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "horizontal node",
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.75,
+ "stroke": "#2B78E4"
+ }
+ },
+ "zIndex": 999,
+ "width": 50,
+ "height": 20,
+ "measured": {
+ "width": 80,
+ "height": 20
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -132.6381872719935,
+ "y": 690.9393516042962
+ }
+ },
+ {
+ "id": "rfg1MAPkP5mIXnvr0oTPl",
+ "type": "section",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 649.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ }
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 378,
+ "height": 186
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 649.400748222349
+ }
+ },
+ {
+ "id": "4qvR1QQzrmoVIVCAsp92H",
+ "type": "vertical",
+ "position": {
+ "x": -246.3175069304428,
+ "y": 3004.2541881503926
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "vertical node",
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2B78E4"
+ }
+ },
+ "zIndex": 999,
+ "width": 20,
+ "height": 150,
+ "measured": {
+ "width": 20,
+ "height": 87
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -246.3175069304428,
+ "y": 3004.2541881503926
+ }
+ },
+ {
+ "id": "HU7wZWiES3m3xl1-NYP6F",
+ "type": "title",
+ "position": {
+ "x": -349.3175069304428,
+ "y": -45.29485328259341
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Design System",
+ "style": {
+ "fontSize": 28,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ }
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 228,
+ "height": 68
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 228,
+ "height": 68,
+ "positionAbsolute": {
+ "x": -349.3175069304428,
+ "y": -45.29485328259341
+ }
+ },
+ {
+ "id": "uqyE79OItPOX33E5FoGel",
+ "type": "vertical",
+ "position": {
+ "x": -245.3175069304428,
+ "y": -133.0992517776511
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "vertical node",
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.75,
+ "stroke": "#2B78E4"
+ }
+ },
+ "zIndex": 999,
+ "width": 20,
+ "height": 150,
+ "measured": {
+ "width": 20,
+ "height": 81
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -245.3175069304428,
+ "y": -133.0992517776511
+ }
+ },
+ {
+ "id": "CCmziWV0VnzZxVbjVF_br",
+ "type": "paragraph",
+ "position": {
+ "x": -30.16615091290565,
+ "y": -148.2948532825934
+ },
+ "selected": false,
+ "data": {
+ "label": "Find the interactive version of this roadmap and more roadmaps at",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center",
+ "borderColor": "#000000",
+ "backgroundColor": "#FFFFFf"
+ },
+ "oldId": "kpF15oUmlUmk1qVGEBB7Y"
+ },
+ "zIndex": 999,
+ "width": 355,
+ "height": 143,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": -148.2948532825934
+ },
+ "dragging": false,
+ "selectable": true,
+ "focusable": true,
+ "style": {
+ "width": 355,
+ "height": 143
+ },
+ "resizing": false,
+ "measured": {
+ "width": 378,
+ "height": 151
+ }
+ },
+ {
+ "id": "if9eTna5NRTMStVwpSwDP",
+ "type": "button",
+ "position": {
+ "x": -0.13818727199350178,
+ "y": -62.09925177765109
+ },
+ "selected": false,
+ "data": {
+ "label": "roadmap.sh",
+ "href": "https://roadmap.sh",
+ "color": "#ffffff",
+ "backgroundColor": "#4136D6",
+ "style": {
+ "fontSize": 17
+ },
+ "oldId": "2zqZkyVgigifcRS1H7F_b"
+ },
+ "zIndex": 999,
+ "width": 330,
+ "height": 49,
+ "dragging": false,
+ "style": {
+ "width": 330,
+ "height": 49
+ },
+ "resizing": false,
+ "positionAbsolute": {
+ "x": -0.13818727199350178,
+ "y": -62.09925177765109
+ },
+ "selectable": true,
+ "focusable": true,
+ "measured": {
+ "width": 331,
+ "height": 49
+ }
+ },
+ {
+ "id": "uvnV1IjE8RV-FKDxHntUU",
+ "type": "topic",
+ "position": {
+ "x": -362.3175069304428,
+ "y": 152.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Understand he Basics",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "JfXwzkN29UGz17FYHHE3A"
+ },
+ "zIndex": 999,
+ "width": 215,
+ "height": 49,
+ "measured": {
+ "width": 254,
+ "height": 49
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -362.3175069304428,
+ "y": 152.4393516042962
+ }
+ },
+ {
+ "id": "4PrkkoZ5fY-oow0O-bVhu",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 46.439351604296206
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "What is a Design System?",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 378,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 46.439351604296206
+ }
+ },
+ {
+ "id": "2rlmLn_yQQV-7DpX1qT98",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 99.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Need of Design System",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "VhSEH_RoWFt1z2lial7xZ"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 378,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 99.4393516042962
+ }
+ },
+ {
+ "id": "w_rUaBorHFOY74S0JiEwM",
+ "type": "linksgroup",
+ "position": {
+ "x": -710.4579568300146,
+ "y": -148.2948532825934
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Related Roadmaps",
+ "links": [
+ {
+ "id": "CVNNr97eZmGVFZyNVmR9b",
+ "label": "UX Design",
+ "href": "",
+ "url": "https://roadmap.sh/ux-design"
+ },
+ {
+ "id": "n0eX8uQ-AM9USJn4HY4FV",
+ "label": "Frontend Development",
+ "url": "https://roadmap.sh/frontend"
+ },
+ {
+ "id": "zwe6k5A7ZsbgCjvbz409x",
+ "label": "JavaScript Roadmap",
+ "url": "https://roadmap.sh/javascript"
+ },
+ {
+ "id": "JwIifMJGmRamELLZw5_WD",
+ "label": "React Roadmap",
+ "url": "https://roadmap.sh/react"
+ }
+ ]
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 270,
+ "height": 193
+ },
+ "dragging": false,
+ "width": 260,
+ "height": 192,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": -148.2948532825934
+ }
+ },
+ {
+ "id": "J5mU0v491qrm-mr1W3Msd",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 152.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Design System vs Component Library",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 69,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 378,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 152.4393516042962
+ }
+ },
+ {
+ "width": 410,
+ "height": 119,
+ "id": "O5dely89N5UCMBeUfh8ud",
+ "type": "paragraph",
+ "position": {
+ "x": -701.6381872719935,
+ "y": 2882.2541881503926
+ },
+ "selected": false,
+ "data": {
+ "label": "Visit the following roadmaps to keep learning",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center",
+ "borderColor": "#000000",
+ "backgroundColor": "WHITe"
+ },
+ "oldId": "0vLaVNJaJSHZ_bHli6Qzs"
+ },
+ "zIndex": 999,
+ "positionAbsolute": {
+ "x": -701.6381872719935,
+ "y": 2882.2541881503926
+ },
+ "dragging": false,
+ "style": {
+ "width": 410,
+ "height": 119
+ },
+ "resizing": false,
+ "focusable": true,
+ "selectable": true,
+ "measured": {
+ "width": 602,
+ "height": 122
+ }
+ },
+ {
+ "width": 380,
+ "height": 49,
+ "id": "6AIUtChWC_gK8Ax0UuBjd",
+ "type": "button",
+ "position": {
+ "x": -687.6229822365909,
+ "y": 2939.899845583502
+ },
+ "selected": false,
+ "data": {
+ "label": "Frontend",
+ "href": "https://roadmap.sh/frontend",
+ "color": "#FFf",
+ "backgroundColor": "#4136D6",
+ "style": {
+ "fontSize": 17
+ },
+ "borderColor": "#4136D6",
+ "oldId": "f5WRewBlpeYMf71cPcXs-"
+ },
+ "zIndex": 999,
+ "dragging": false,
+ "positionAbsolute": {
+ "x": -687.6229822365909,
+ "y": 2939.899845583502
+ },
+ "style": {
+ "width": 380,
+ "height": 49
+ },
+ "focusable": true,
+ "resizing": false,
+ "selectable": true,
+ "measured": {
+ "width": 199,
+ "height": 49
+ }
+ },
+ {
+ "id": "6r9XbwlBtHmJrhviG2cTD",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 205.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "What is Atomic Design",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 378,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 205.4393516042962
+ }
+ },
+ {
+ "id": "_3_tFOpQisx6DSP4Yc2E2",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 258.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Stakeholders Involved in Building",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 378,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 258.43935160429623
+ }
+ },
+ {
+ "width": 380,
+ "height": 49,
+ "id": "UZq7Aq3nhidsXdsKeEnNF",
+ "type": "button",
+ "position": {
+ "x": -484.62298223659093,
+ "y": 2939.899845583502
+ },
+ "selected": false,
+ "data": {
+ "label": "Backend",
+ "href": "https://roadmap.sh/backend",
+ "color": "#FFf",
+ "backgroundColor": "#4136D6",
+ "style": {
+ "fontSize": 17
+ },
+ "borderColor": "#4136D6",
+ "oldId": "f5WRewBlpeYMf71cPcXs-"
+ },
+ "zIndex": 999,
+ "dragging": false,
+ "positionAbsolute": {
+ "x": -484.62298223659093,
+ "y": 2939.899845583502
+ },
+ "style": {
+ "width": 380,
+ "height": 49
+ },
+ "focusable": true,
+ "resizing": false,
+ "selectable": true,
+ "measured": {
+ "width": 176,
+ "height": 49
+ }
+ },
+ {
+ "id": "hauTvrBOAHgrUnO_m_kDM",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 311.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Design System Examples",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 378,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 311.43935160429623
+ }
+ },
+ {
+ "id": "de0TKvmFTDmKGZc5X7iFq",
+ "type": "topic",
+ "position": {
+ "x": -362.3175069304428,
+ "y": 314.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Terminology",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "JfXwzkN29UGz17FYHHE3A"
+ },
+ "zIndex": 999,
+ "width": 138,
+ "height": 49,
+ "measured": {
+ "width": 254,
+ "height": 49
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -362.3175069304428,
+ "y": 314.43935160429623
+ }
+ },
+ {
+ "id": "97cpJyKBKNAq1P_pQZH-t",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 155.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Component",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 155.4393516042962
+ }
+ },
+ {
+ "id": "vJ4WytrzY7j10mo8S3O1u",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 208.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Component Library",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 208.4393516042962
+ }
+ },
+ {
+ "id": "fPUuXrlchna3K00KcY4O6",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 261.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Design Language",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 261.43935160429623
+ }
+ },
+ {
+ "id": "kifE3JE2immnU1O3-toZf",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 314.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Governance",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 314.43935160429623
+ }
+ },
+ {
+ "id": "mlBzJ2YvBr9QuOthKdj0p",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 367.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Guidelines",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 367.43935160429623
+ }
+ },
+ {
+ "id": "7xPT8rUX3hjSWbxH_FfQs",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 420.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Pattern",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 420.43935160429623
+ }
+ },
+ {
+ "id": "4dzoZmkNHPedgLqLy93t8",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 473.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Pilot",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 473.43935160429623
+ }
+ },
+ {
+ "id": "jETJVuS_EczJiQASLqaQr",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 526.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Token",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 526.4393516042962
+ }
+ },
+ {
+ "id": "lUObv2N7eH3Jdnwwd5vmI",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 579.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "UI Kit",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 579.4393516042962
+ }
+ },
+ {
+ "id": "dUaoMARPabiD4DRqdkaer",
+ "type": "topic",
+ "position": {
+ "x": -362.3175069304428,
+ "y": 450.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Making a Design System",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "JfXwzkN29UGz17FYHHE3A"
+ },
+ "zIndex": 999,
+ "width": 234,
+ "height": 49,
+ "measured": {
+ "width": 254,
+ "height": 49
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -362.3175069304428,
+ "y": 450.43935160429623
+ }
+ },
+ {
+ "id": "-9I3fTpnQlmcZmIIuQiPe",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 396.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Making it from Scratch",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 209,
+ "height": 69,
+ "style": {
+ "width": 209
+ },
+ "measured": {
+ "width": 378,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 396.43935160429623
+ }
+ },
+ {
+ "id": "z5gBy7BjlBKwbYbxXtoDA",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 450.43935160429623
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Making it from Existing Design",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 209,
+ "height": 69,
+ "style": {
+ "width": 209
+ },
+ "measured": {
+ "width": 378,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 450.43935160429623
+ }
+ },
+ {
+ "id": "8eWhvW2zDIxMGHaXl0Y9i",
+ "type": "topic",
+ "position": {
+ "x": -362.3175069304428,
+ "y": 676.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Existing Design Analysis",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "JfXwzkN29UGz17FYHHE3A"
+ },
+ "zIndex": 999,
+ "width": 230,
+ "height": 49,
+ "measured": {
+ "width": 254,
+ "height": 49
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -362.3175069304428,
+ "y": 676.4393516042962
+ }
+ },
+ {
+ "id": "NKm-gXbt5Y7dDwKVkPHjX",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 537.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Performing a Visual Audit",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 229,
+ "height": 69,
+ "style": {
+ "width": 229
+ },
+ "measured": {
+ "width": 378,
+ "height": 50
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 537.4393516042962
+ }
+ },
+ {
+ "id": "CnsDoZ3gIaPeNbwHuZXYJ",
+ "type": "subtopic",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 591.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Identify Existing Design Process",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 229,
+ "height": 69,
+ "style": {
+ "width": 229
+ },
+ "measured": {
+ "width": 378,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 591.4393516042962
+ }
+ },
+ {
+ "id": "jtjlvmiYtYGZtWJITn92P",
+ "type": "label",
+ "position": {
+ "x": 76.3618127280065,
+ "y": 660.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Identify Design Elements",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000"
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 207,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 207,
+ "height": 36,
+ "positionAbsolute": {
+ "x": 76.3618127280065,
+ "y": 660.400748222349
+ }
+ },
+ {
+ "id": "aak3227IDDJMh0MquQX6m",
+ "type": "subtopic",
+ "position": {
+ "x": -10.58443340137734,
+ "y": 710.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Icons",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "2prUeRYbSJTYjo2quJIKs"
+ },
+ "zIndex": 999,
+ "width": 122,
+ "height": 49,
+ "style": {
+ "width": 122
+ },
+ "measured": {
+ "width": 80,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -10.58443340137734,
+ "y": 710.400748222349
+ }
+ },
+ {
+ "id": "-MrrapoyFWKhSeE2PZ9mb",
+ "type": "subtopic",
+ "position": {
+ "x": 177.8338490870944,
+ "y": 710.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Visual Forms",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 149,
+ "height": 49,
+ "style": {
+ "width": 149
+ },
+ "measured": {
+ "width": 149,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 177.8338490870944,
+ "y": 710.400748222349
+ }
+ },
+ {
+ "id": "78RsPhsWpl00AbkwKXUxL",
+ "type": "subtopic",
+ "position": {
+ "x": 73.41556659862266,
+ "y": 710.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Sizing",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "2prUeRYbSJTYjo2quJIKs"
+ },
+ "zIndex": 999,
+ "width": 122,
+ "height": 49,
+ "style": {
+ "width": 122
+ },
+ "measured": {
+ "width": 100,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 73.41556659862266,
+ "y": 710.400748222349
+ }
+ },
+ {
+ "id": "GtLYBPJjdZwG0qgA7erk7",
+ "type": "subtopic",
+ "position": {
+ "x": 73.41556659862266,
+ "y": 763.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Spaces",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 149,
+ "height": 49,
+ "style": {
+ "width": 149
+ },
+ "measured": {
+ "width": 100,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 73.41556659862266,
+ "y": 763.400748222349
+ }
+ },
+ {
+ "id": "2prUeRYbSJTYjo2quJIKs",
+ "type": "subtopic",
+ "position": {
+ "x": -10.166150912905607,
+ "y": 763.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Color",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 122,
+ "height": 49,
+ "style": {
+ "width": 122
+ },
+ "measured": {
+ "width": 80,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -10.166150912905607,
+ "y": 763.400748222349
+ }
+ },
+ {
+ "id": "ODQ8zrHc2rsc8PN-APKvz",
+ "type": "subtopic",
+ "position": {
+ "x": 177.8338490870944,
+ "y": 763.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Typography",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "VhSEH_RoWFt1z2lial7xZ"
+ },
+ "zIndex": 999,
+ "width": 149,
+ "height": 49,
+ "style": {
+ "width": 149
+ },
+ "measured": {
+ "width": 149,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 177.8338490870944,
+ "y": 763.400748222349
+ }
+ },
+ {
+ "id": "rwcJIAXH2ooXpDvkQqrEX",
+ "type": "section",
+ "position": {
+ "x": -29.138187271993502,
+ "y": 830.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ },
+ "oldId": "rfg1MAPkP5mIXnvr0oTPl"
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 376,
+ "height": 238
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -29.138187271993502,
+ "y": 830.400748222349
+ }
+ },
+ {
+ "id": "uMvaS418F2pxiJ4tYtLJ2",
+ "type": "label",
+ "position": {
+ "x": 70.3618127280065,
+ "y": 844.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Identify Components",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "jtjlvmiYtYGZtWJITn92P"
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 175,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 175,
+ "height": 36,
+ "positionAbsolute": {
+ "x": 70.3618127280065,
+ "y": 844.400748222349
+ }
+ },
+ {
+ "id": "_dIMuXWI73ogboGjnLIpT",
+ "type": "subtopic",
+ "position": {
+ "x": -13.138187271993502,
+ "y": 893.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Avatar",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "aak3227IDDJMh0MquQX6m"
+ },
+ "zIndex": 999,
+ "width": 122,
+ "height": 49,
+ "style": {
+ "width": 122
+ },
+ "measured": {
+ "width": 103,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -13.138187271993502,
+ "y": 893.400748222349
+ }
+ },
+ {
+ "id": "UG4AIgJBfZpuhia4Y1K5v",
+ "type": "subtopic",
+ "position": {
+ "x": 210.3618127280065,
+ "y": 893.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Badges",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "-MrrapoyFWKhSeE2PZ9mb"
+ },
+ "zIndex": 999,
+ "width": 149,
+ "height": 49,
+ "style": {
+ "width": 149
+ },
+ "measured": {
+ "width": 120,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 210.3618127280065,
+ "y": 893.400748222349
+ }
+ },
+ {
+ "id": "5DUobzueMZbScyTZTHpCS",
+ "type": "subtopic",
+ "position": {
+ "x": 94.83384908709438,
+ "y": 893.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Banners",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "78RsPhsWpl00AbkwKXUxL"
+ },
+ "zIndex": 999,
+ "width": 122,
+ "height": 49,
+ "style": {
+ "width": 122
+ },
+ "measured": {
+ "width": 113,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 94.83384908709438,
+ "y": 893.400748222349
+ }
+ },
+ {
+ "id": "s6oqvHgwK4Cwyx-JENBbY",
+ "type": "subtopic",
+ "position": {
+ "x": 209.3618127280065,
+ "y": 946.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Buttons",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "GtLYBPJjdZwG0qgA7erk7"
+ },
+ "zIndex": 999,
+ "width": 149,
+ "height": 49,
+ "style": {
+ "width": 149
+ },
+ "measured": {
+ "width": 120,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 209.3618127280065,
+ "y": 946.400748222349
+ }
+ },
+ {
+ "id": "yLLAUGbGUHBTEDkZNK0fm",
+ "type": "subtopic",
+ "position": {
+ "x": -13.138187271993502,
+ "y": 946.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Cards",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "5LCMzBnnS206t5EtgaUx8"
+ },
+ "zIndex": 999,
+ "width": 122,
+ "height": 49,
+ "style": {
+ "width": 122
+ },
+ "measured": {
+ "width": 103,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -13.138187271993502,
+ "y": 946.400748222349
+ }
+ },
+ {
+ "id": "hzVwLVzAij6TgPTcNHyhv",
+ "type": "subtopic",
+ "position": {
+ "x": -13.138187271993502,
+ "y": 999.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Dropdowns",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "Ia1gYzepJOTvTro961eSj"
+ },
+ "zIndex": 999,
+ "width": 149,
+ "height": 49,
+ "style": {
+ "width": 149
+ },
+ "measured": {
+ "width": 168,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -13.138187271993502,
+ "y": 999.400748222349
+ }
+ },
+ {
+ "id": "5LCMzBnnS206t5EtgaUx8",
+ "type": "subtopic",
+ "position": {
+ "x": 93.83384908709438,
+ "y": 946.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Forms",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "2prUeRYbSJTYjo2quJIKs"
+ },
+ "zIndex": 999,
+ "width": 122,
+ "height": 49,
+ "style": {
+ "width": 122
+ },
+ "measured": {
+ "width": 113,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 93.83384908709438,
+ "y": 946.400748222349
+ }
+ },
+ {
+ "id": "Ia1gYzepJOTvTro961eSj",
+ "type": "subtopic",
+ "position": {
+ "x": 161.33384908709436,
+ "y": 999.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "...other",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ODQ8zrHc2rsc8PN-APKvz"
+ },
+ "zIndex": 999,
+ "width": 149,
+ "height": 49,
+ "style": {
+ "width": 149
+ },
+ "measured": {
+ "width": 169,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 161.33384908709436,
+ "y": 999.400748222349
+ }
+ },
+ {
+ "id": "C-lhmqOewid4_JSJfI51y",
+ "type": "vertical",
+ "position": {
+ "x": -62.62298223659093,
+ "y": 541.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "vertical node",
+ "oldId": "XzNwNomMj4gRw-CL3as4u"
+ },
+ "zIndex": 999,
+ "width": 20,
+ "height": 150,
+ "measured": {
+ "width": 20,
+ "height": 528
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -62.62298223659093,
+ "y": 541.4393516042962
+ }
+ },
+ {
+ "id": "ILRDAnpfGHCZq-FBlbfDO",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 676.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "A/B Tests & Experiments",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 676.4393516042962
+ }
+ },
+ {
+ "id": "pRJ9wEPNfFx_6EYB501vk",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 729.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Regional Requirements",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 729.4393516042962
+ }
+ },
+ {
+ "id": "-b4GjLpL_ppDMJSiChTef",
+ "type": "subtopic",
+ "position": {
+ "x": -710.4579568300146,
+ "y": 782.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Documentation",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -710.4579568300146,
+ "y": 782.4393516042962
+ }
+ },
+ {
+ "id": "JnaNZ9MfMrXQrjW2wABzB",
+ "type": "topic",
+ "position": {
+ "x": -362.3175069304428,
+ "y": 982.900748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Creating Design Language",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "JfXwzkN29UGz17FYHHE3A"
+ },
+ "zIndex": 999,
+ "width": 252,
+ "height": 49,
+ "measured": {
+ "width": 254,
+ "height": 49
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -362.3175069304428,
+ "y": 982.900748222349
+ }
+ },
+ {
+ "id": "zSv63LkcNpHjAMB4eZewE",
+ "type": "paragraph",
+ "position": {
+ "x": -377.3175069304428,
+ "y": 725.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "If building from existing design",
+ "style": {
+ "fontSize": 17,
+ "borderColor": "transparent",
+ "backgroundColor": "transparent",
+ "color": "#000000",
+ "textAlign": "center",
+ "justifyContent": "center",
+ "padding": 16
+ }
+ },
+ "zIndex": 999,
+ "width": 271,
+ "height": 62,
+ "measured": {
+ "width": 285,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -377.3175069304428,
+ "y": 725.4393516042962
+ }
+ },
+ {
+ "id": "toyNbBB5tbyiJZkzuklIv",
+ "type": "subtopic",
+ "position": {
+ "x": -691.1381872719935,
+ "y": 911.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Writing Guidelines",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 200,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -691.1381872719935,
+ "y": 911.4393516042962
+ }
+ },
+ {
+ "id": "fnlVIgsmyxj2UVCCjM-8g",
+ "type": "subtopic",
+ "position": {
+ "x": -691.1381872719935,
+ "y": 964.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Tone of Voice",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 200,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -691.1381872719935,
+ "y": 964.4393516042962
+ }
+ },
+ {
+ "id": "Zspu1SsuTE34PVmYePcs4",
+ "type": "subtopic",
+ "position": {
+ "x": -691.1381872719935,
+ "y": 1017.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Terminology",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 200,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -691.1381872719935,
+ "y": 1017.4393516042962
+ }
+ },
+ {
+ "id": "1RJrMVJf_3clM7E5OML-f",
+ "type": "subtopic",
+ "position": {
+ "x": -691.1381872719935,
+ "y": 1070.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Design Principles",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 200,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -691.1381872719935,
+ "y": 1070.4393516042962
+ }
+ },
+ {
+ "id": "cMfsRtvzvDZZJ0TqeUOxm",
+ "type": "subtopic",
+ "position": {
+ "x": -691.1381872719935,
+ "y": 1123.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Vision",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "W4gEPRYmk5Y7y3PjI6fR7"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 200,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -691.1381872719935,
+ "y": 1123.4393516042962
+ }
+ },
+ {
+ "id": "03t80lsT2te9B0rYpIB9v",
+ "type": "label",
+ "position": {
+ "x": -622.1381872719935,
+ "y": 867.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Brand",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000"
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 62,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 62,
+ "height": 36,
+ "positionAbsolute": {
+ "x": -622.1381872719935,
+ "y": 867.400748222349
+ }
+ },
+ {
+ "id": "SY-FCki-0MaUv7zvw6keW",
+ "type": "section",
+ "position": {
+ "x": -711.6381872719935,
+ "y": 1180.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#fafafa",
+ "borderColor": "#000000"
+ },
+ "oldId": "dWZ4Tbbb1lsfHP1qy0Z9Z"
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 239,
+ "height": 339
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -711.6381872719935,
+ "y": 1180.400748222349
+ }
+ },
+ {
+ "id": "Wn8CylBz-hyl9-iXcUVTO",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 1233.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Monochrome Version",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "toyNbBB5tbyiJZkzuklIv"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 209,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 1233.4393516042962
+ }
+ },
+ {
+ "id": "FA3JsZgNhKrgNHVtVreol",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 1286.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Small Use Guidance",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "fnlVIgsmyxj2UVCCjM-8g"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 209,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 1286.4393516042962
+ }
+ },
+ {
+ "id": "7n61402xwhIgJ7dPHg8q7",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 1339.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Placement Guidance",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "Zspu1SsuTE34PVmYePcs4"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 209,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 1339.4393516042962
+ }
+ },
+ {
+ "id": "RmSFwKqL9yXXxGKZusKWX",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 1392.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Usage Guidance",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "1RJrMVJf_3clM7E5OML-f"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 209,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 1392.4393516042962
+ }
+ },
+ {
+ "id": "-6LPUMRm-SqvRVEWPDFl8",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 1445.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "File Formats",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cMfsRtvzvDZZJ0TqeUOxm"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 209,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 1445.4393516042962
+ }
+ },
+ {
+ "id": "82Due7XFcIKGY5I8cp9yr",
+ "type": "label",
+ "position": {
+ "x": -619.1381872719935,
+ "y": 1189.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Logo",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "03t80lsT2te9B0rYpIB9v"
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 54,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 54,
+ "height": 36,
+ "positionAbsolute": {
+ "x": -619.1381872719935,
+ "y": 1189.400748222349
+ }
+ },
+ {
+ "id": "C4-NjCgai_t7QWvfj_d6x",
+ "type": "section",
+ "position": {
+ "x": -711.6381872719935,
+ "y": 1506.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#fafafa",
+ "borderColor": "#000000"
+ },
+ "oldId": "SY-FCki-0MaUv7zvw6keW"
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 239,
+ "height": 231
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -711.6381872719935,
+ "y": 1506.400748222349
+ }
+ },
+ {
+ "id": "aLtOGjNFxaRzg0PI-ed99",
+ "type": "subtopic",
+ "position": {
+ "x": -698.1381872719935,
+ "y": 1559.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Accessibility",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "Wn8CylBz-hyl9-iXcUVTO"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 211,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -698.1381872719935,
+ "y": 1559.4393516042962
+ }
+ },
+ {
+ "id": "PlW8mHnOTyYnbtl0zUSG9",
+ "type": "subtopic",
+ "position": {
+ "x": -698.1381872719935,
+ "y": 1612.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "User Onboarding",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "FA3JsZgNhKrgNHVtVreol"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 211,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -698.1381872719935,
+ "y": 1612.4393516042962
+ }
+ },
+ {
+ "id": "bD-DjUbAA6l2eK1R9ITcK",
+ "type": "subtopic",
+ "position": {
+ "x": -698.1381872719935,
+ "y": 1665.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Microcopy Guidelines",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "TiCNCRpMPgZUhn7JdaIZA"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 211,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -698.1381872719935,
+ "y": 1665.4393516042962
+ }
+ },
+ {
+ "id": "6-o1viBIrvHaefbcMIJMW",
+ "type": "label",
+ "position": {
+ "x": -641.6381872719935,
+ "y": 1515.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Guidelines",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "82Due7XFcIKGY5I8cp9yr"
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 98,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 98,
+ "height": 36,
+ "positionAbsolute": {
+ "x": -641.6381872719935,
+ "y": 1515.400748222349
+ }
+ },
+ {
+ "id": "nkf1WaXyBcBFknVlywsYu",
+ "type": "vertical",
+ "position": {
+ "x": -460.4579568300146,
+ "y": 860.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "vertical node"
+ },
+ "zIndex": 999,
+ "width": 20,
+ "height": 150,
+ "measured": {
+ "width": 20,
+ "height": 877
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -460.4579568300146,
+ "y": 860.400748222349
+ }
+ },
+ {
+ "id": "a53cl6ZKvYXxG25Ii2_zu",
+ "type": "topic",
+ "position": {
+ "x": -351.3175069304428,
+ "y": 1252.796264330049
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Defining Design Tokens",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "JfXwzkN29UGz17FYHHE3A"
+ },
+ "zIndex": 999,
+ "width": 226,
+ "height": 49,
+ "measured": {
+ "width": 230,
+ "height": 49
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -351.3175069304428,
+ "y": 1252.796264330049
+ }
+ },
+ {
+ "id": "hdHZ8LjWJm_kVkwAanQtC",
+ "type": "section",
+ "position": {
+ "x": -30.16615091290565,
+ "y": 1120.3745370913068
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ },
+ "oldId": "dWZ4Tbbb1lsfHP1qy0Z9Z"
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 213,
+ "height": 277
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.16615091290565,
+ "y": 1120.3745370913068
+ }
+ },
+ {
+ "id": "fW0cEy2SB0HDbiF7QA7Ev",
+ "type": "subtopic",
+ "position": {
+ "x": -14.166150912905621,
+ "y": 1172.611734127987
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Accessibility",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "toyNbBB5tbyiJZkzuklIv"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -14.166150912905621,
+ "y": 1172.611734127987
+ }
+ },
+ {
+ "id": "__Pv19gRr2SFknVnfm0Mr",
+ "type": "subtopic",
+ "position": {
+ "x": -14.166150912905621,
+ "y": 1225.611734127987
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Functional Colors",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "fnlVIgsmyxj2UVCCjM-8g"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -14.166150912905621,
+ "y": 1225.611734127987
+ }
+ },
+ {
+ "id": "kxUnqpydDwB73IwrCPZM0",
+ "type": "subtopic",
+ "position": {
+ "x": -14.166150912905621,
+ "y": 1278.611734127987
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Dark Mode",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "Zspu1SsuTE34PVmYePcs4"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -14.166150912905621,
+ "y": 1278.611734127987
+ }
+ },
+ {
+ "id": "XDfxs5cgjSuTEprZi2Z5b",
+ "type": "subtopic",
+ "position": {
+ "x": -14.166150912905621,
+ "y": 1331.611734127987
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Guidelines",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "1RJrMVJf_3clM7E5OML-f"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -14.166150912905621,
+ "y": 1331.611734127987
+ }
+ },
+ {
+ "id": "sKui9mF1oCOZq5DJkAqyP",
+ "type": "label",
+ "position": {
+ "x": 43.33384908709438,
+ "y": 1129.3745370913068
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Colors",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "03t80lsT2te9B0rYpIB9v"
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 66,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 66,
+ "height": 36,
+ "positionAbsolute": {
+ "x": 43.33384908709438,
+ "y": 1129.3745370913068
+ }
+ },
+ {
+ "id": "faA8T0Am-XVRCuS6veAIN",
+ "type": "section",
+ "position": {
+ "x": 178.58262271332373,
+ "y": 1120.3745370913068
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ },
+ "oldId": "hdHZ8LjWJm_kVkwAanQtC"
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 166,
+ "height": 276
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 178.58262271332373,
+ "y": 1120.3745370913068
+ }
+ },
+ {
+ "id": "wQbMhC7q3qdKYf_pX5qL4",
+ "type": "subtopic",
+ "position": {
+ "x": 193.58262271332373,
+ "y": 1173.796264330049
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Units",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "fW0cEy2SB0HDbiF7QA7Ev"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 140,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 193.58262271332373,
+ "y": 1173.796264330049
+ }
+ },
+ {
+ "id": "8f2V-rM7soorTTvNo5Vcx",
+ "type": "subtopic",
+ "position": {
+ "x": 193.58262271332373,
+ "y": 1226.796264330049
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Grid",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "__Pv19gRr2SFknVnfm0Mr"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 140,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 193.58262271332373,
+ "y": 1226.796264330049
+ }
+ },
+ {
+ "id": "djwnJq9Y_Hx1Ynw01wr_u",
+ "type": "subtopic",
+ "position": {
+ "x": 193.08262271332373,
+ "y": 1279.796264330049
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Breakpoints",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "kxUnqpydDwB73IwrCPZM0"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 140,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 193.08262271332373,
+ "y": 1279.796264330049
+ }
+ },
+ {
+ "id": "dXaYOwTAnYSlipNEBSV9l",
+ "type": "subtopic",
+ "position": {
+ "x": 193.58262271332373,
+ "y": 1332.796264330049
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Spacking",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "XDfxs5cgjSuTEprZi2Z5b"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 140,
+ "height": 49
+ },
+ "resizing": true,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 193.58262271332373,
+ "y": 1332.796264330049
+ }
+ },
+ {
+ "id": "z5RKq0GcdXMMTO4CZD4LP",
+ "type": "label",
+ "position": {
+ "x": 223.08262271332376,
+ "y": 1130.559067293369
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Layout",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "sKui9mF1oCOZq5DJkAqyP"
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 66,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 66,
+ "height": 36,
+ "positionAbsolute": {
+ "x": 223.08262271332376,
+ "y": 1130.559067293369
+ }
+ },
+ {
+ "id": "_pRY0ZewNcKBrm4xnAvbQ",
+ "type": "section",
+ "position": {
+ "x": -30.417377286676256,
+ "y": 1394.0372246841675
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ },
+ "oldId": "hdHZ8LjWJm_kVkwAanQtC"
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 375,
+ "height": 168
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676256,
+ "y": 1394.0372246841675
+ }
+ },
+ {
+ "id": "8YVCtgYRHR3VcpUJXMVwP",
+ "type": "subtopic",
+ "position": {
+ "x": -19.584433401377353,
+ "y": 1446.2744217208476
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Responsiveness",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "fW0cEy2SB0HDbiF7QA7Ev"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 167,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -19.584433401377353,
+ "y": 1446.2744217208476
+ }
+ },
+ {
+ "id": "Zl7MVllzJgObruYtlibKf",
+ "type": "subtopic",
+ "position": {
+ "x": 151.8338490870944,
+ "y": 1446.2744217208476
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Grid Relation",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "__Pv19gRr2SFknVnfm0Mr"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 183,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 151.8338490870944,
+ "y": 1446.2744217208476
+ }
+ },
+ {
+ "id": "L2NHddsv5RGR_BW0I3f4T",
+ "type": "subtopic",
+ "position": {
+ "x": -19.16615091290562,
+ "y": 1499.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Readability",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "HDf2L4F1f8uUGpVaf7Y7z"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 113,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -19.16615091290562,
+ "y": 1499.4393516042962
+ }
+ },
+ {
+ "id": "wFL9axjaPcVvI8XWduxgz",
+ "type": "subtopic",
+ "position": {
+ "x": 98.83001753849618,
+ "y": 1499.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Performance",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "Jab5LO0mGhTy1cU61Catu"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 121,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 98.83001753849618,
+ "y": 1499.4393516042962
+ }
+ },
+ {
+ "id": "lKmaeG9BWlaKFVrVEFuYQ",
+ "type": "label",
+ "position": {
+ "x": 104.91556659862266,
+ "y": 1403.0372246841675
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Typography",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "ObM6oFLLQxiF6acWJA-tb"
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 104,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 104,
+ "height": 36,
+ "positionAbsolute": {
+ "x": 104.91556659862266,
+ "y": 1403.0372246841675
+ }
+ },
+ {
+ "id": "Jab5LO0mGhTy1cU61Catu",
+ "type": "subtopic",
+ "position": {
+ "x": 223.72541004133052,
+ "y": 1498.400748222349
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Guidelines",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "XDfxs5cgjSuTEprZi2Z5b"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 112,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 223.72541004133052,
+ "y": 1498.400748222349
+ }
+ },
+ {
+ "id": "ObM6oFLLQxiF6acWJA-tb",
+ "type": "label",
+ "position": {
+ "x": 104.91556659862266,
+ "y": 1572.4393516042962
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Iconography",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "sKui9mF1oCOZq5DJkAqyP"
+ },
+ "zIndex": 999,
+ "measured": {
+ "width": 111,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 111,
+ "height": 36,
+ "positionAbsolute": {
+ "x": 104.91556659862266,
+ "y": 1572.4393516042962
+ }
+ },
+ {
+ "id": "DhrnZwQODG0P7D-27_3ec",
+ "type": "subtopic",
+ "position": {
+ "x": -19.16615091290562,
+ "y": 1615.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Accessibility",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "hjiJJg4KNr8lyktFQd868"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 117,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -19.16615091290562,
+ "y": 1615.2548214022338
+ }
+ },
+ {
+ "id": "SPK1i0XuHpNEWyi1iIxrV",
+ "type": "subtopic",
+ "position": {
+ "x": 101.83384908709439,
+ "y": 1615.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Style",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "HDf2L4F1f8uUGpVaf7Y7z"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 80,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 101.83384908709439,
+ "y": 1615.2548214022338
+ }
+ },
+ {
+ "id": "wiclAEEYioRgLmXFcKQ4E",
+ "type": "subtopic",
+ "position": {
+ "x": 185.83384908709436,
+ "y": 1615.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Naming",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "HDf2L4F1f8uUGpVaf7Y7z"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 148,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 185.83384908709436,
+ "y": 1615.2548214022338
+ }
+ },
+ {
+ "id": "6Hmj_TeQ563jshqAAl__I",
+ "type": "subtopic",
+ "position": {
+ "x": -19.16615091290562,
+ "y": 1667.6520087116996
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Grid Relation",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "eTxhpC3AQIMcUax6WFU9U"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 147,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -19.16615091290562,
+ "y": 1667.6520087116996
+ }
+ },
+ {
+ "id": "w3LS85eFerscaxb2Xp-dP",
+ "type": "subtopic",
+ "position": {
+ "x": 131.8338490870944,
+ "y": 1667.6520087116996
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Sizes",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "HDf2L4F1f8uUGpVaf7Y7z"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 100,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 131.8338490870944,
+ "y": 1667.6520087116996
+ }
+ },
+ {
+ "id": "HDf2L4F1f8uUGpVaf7Y7z",
+ "type": "subtopic",
+ "position": {
+ "x": 235.83384908709434,
+ "y": 1667.6520087116996
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Keywords",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "kxUnqpydDwB73IwrCPZM0"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 100,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 235.83384908709434,
+ "y": 1667.6520087116996
+ }
+ },
+ {
+ "id": "Y0KxHVrcNGHDao-38Oz3w",
+ "type": "subtopic",
+ "position": {
+ "x": -19.16615091290562,
+ "y": 1721.6520087116996
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Reserved Icons",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "eTxhpC3AQIMcUax6WFU9U"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -19.16615091290562,
+ "y": 1721.6520087116996
+ }
+ },
+ {
+ "id": "eTxhpC3AQIMcUax6WFU9U",
+ "type": "subtopic",
+ "position": {
+ "x": 165.33384908709436,
+ "y": 1721.6520087116996
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Guidelines",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "HDf2L4F1f8uUGpVaf7Y7z"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 170,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 165.33384908709436,
+ "y": 1721.6520087116996
+ }
+ },
+ {
+ "id": "BtRuLBspKTqF4nTSr127r",
+ "type": "vertical",
+ "position": {
+ "x": -60.669982461503835,
+ "y": 1120.3745370913068
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "vertical node",
+ "oldId": "XzNwNomMj4gRw-CL3as4u"
+ },
+ "zIndex": 999,
+ "width": 20,
+ "height": 150,
+ "measured": {
+ "width": 20,
+ "height": 659
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -60.669982461503835,
+ "y": 1120.3745370913068
+ }
+ },
+ {
+ "id": "Hw_LQInG6OtSwDXch3Lvg",
+ "type": "topic",
+ "position": {
+ "x": -379.3175069304428,
+ "y": 1844.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Creating Core Components",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "JfXwzkN29UGz17FYHHE3A"
+ },
+ "zIndex": 999,
+ "width": 256,
+ "height": 49,
+ "measured": {
+ "width": 258,
+ "height": 49
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -379.3175069304428,
+ "y": 1844.2548214022338
+ }
+ },
+ {
+ "id": "h3TZY1yBkzLYUK6W7K7xs",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 1840.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Avatar",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 1840.2548214022338
+ }
+ },
+ {
+ "id": "hjiJJg4KNr8lyktFQd868",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 1840.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Input Text",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "HDf2L4F1f8uUGpVaf7Y7z"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 1840.2548214022338
+ }
+ },
+ {
+ "id": "kkqRIgdXWaJbX9CjLpwha",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 1893.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Banner",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 1893.2548214022338
+ }
+ },
+ {
+ "id": "LNsXQI8sE_5kzSD_iMLJA",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 1946.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Badge",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 1946.2548214022336
+ }
+ },
+ {
+ "id": "LWihkf4q5UawjLd84KQxN",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 1999.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Button",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 1999.2548214022336
+ }
+ },
+ {
+ "id": "rZ7d1C9swiqlRTbdJLZ0R",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 2052.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Card",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "2oCAzsk_y2Y2oHUi467dp"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 2052.2548214022336
+ }
+ },
+ {
+ "id": "yWEXfjzuzk99dxjZlG4Cq",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 2105.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Carousel",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 2105.2548214022336
+ }
+ },
+ {
+ "id": "MtBSvKoyjdLd6DIdolLRi",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 2158.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Dropdown",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 2158.2548214022336
+ }
+ },
+ {
+ "id": "bzY_iXRnotct_WnNRTlbd",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 2211.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Icon",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "iusI39fxcu2rbMXiosaM6"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 2211.2548214022336
+ }
+ },
+ {
+ "id": "F5_sxUnnGEdgF6BkA5T5x",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 1893.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Input Checkbox",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 1893.2548214022338
+ }
+ },
+ {
+ "id": "rN-_plAA5FkcQl03wsL18",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 1946.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Input Radio",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 1946.2548214022336
+ }
+ },
+ {
+ "id": "NISeaJUlDtQ0kSuyxmrOT",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 1999.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Input Switch",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "hjiJJg4KNr8lyktFQd868"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 1999.2548214022336
+ }
+ },
+ {
+ "id": "n1nUkMqGtPobZPJHCvPsk",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 2264.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Select",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "iusI39fxcu2rbMXiosaM6"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 2264.2548214022336
+ }
+ },
+ {
+ "id": "iusI39fxcu2rbMXiosaM6",
+ "type": "subtopic",
+ "position": {
+ "x": -30.417377286676242,
+ "y": 2317.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Textarea",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 117,
+ "height": 49,
+ "style": {
+ "width": 117
+ },
+ "measured": {
+ "width": 181,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -30.417377286676242,
+ "y": 2317.2548214022336
+ }
+ },
+ {
+ "id": "2T7tiM3Ew3H1U5iJR2TDb",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 2052.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "List",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "2oCAzsk_y2Y2oHUi467dp"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 2052.2548214022336
+ }
+ },
+ {
+ "id": "JhnHOMIlU6mQcwvIpErUY",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 2105.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Loading Indicator",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "2oCAzsk_y2Y2oHUi467dp"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 2105.2548214022336
+ }
+ },
+ {
+ "id": "IjNitkG25vNo30rB4ckNV",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 2158.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Modal",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "2oCAzsk_y2Y2oHUi467dp"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 2158.2548214022336
+ }
+ },
+ {
+ "id": "1vYR1EMyZhJA-znxnFBBb",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 2211.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Tabs",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "2oCAzsk_y2Y2oHUi467dp"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 2211.2548214022336
+ }
+ },
+ {
+ "id": "-T7uL6a3lJ5-IIcDaG6IN",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 2264.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Toast",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "2oCAzsk_y2Y2oHUi467dp"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 2264.2548214022336
+ }
+ },
+ {
+ "id": "2oCAzsk_y2Y2oHUi467dp",
+ "type": "subtopic",
+ "position": {
+ "x": 155.58384908709436,
+ "y": 2317.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Tooltip",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "NISeaJUlDtQ0kSuyxmrOT"
+ },
+ "zIndex": 999,
+ "width": 181,
+ "height": 49,
+ "style": {
+ "width": 181
+ },
+ "measured": {
+ "width": 189,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 155.58384908709436,
+ "y": 2317.2548214022336
+ }
+ },
+ {
+ "id": "XzNwNomMj4gRw-CL3as4u",
+ "type": "vertical",
+ "position": {
+ "x": -60.669982461503835,
+ "y": 1840.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "vertical node",
+ "oldId": "nkf1WaXyBcBFknVlywsYu"
+ },
+ "zIndex": 999,
+ "width": 20,
+ "height": 150,
+ "measured": {
+ "width": 20,
+ "height": 525
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -60.669982461503835,
+ "y": 1840.2548214022338
+ }
+ },
+ {
+ "id": "jggrr5nZOe6FY3ZrZJTOw",
+ "type": "topic",
+ "position": {
+ "x": -377.3175069304428,
+ "y": 2026.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Creating Core Components",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "JfXwzkN29UGz17FYHHE3A"
+ },
+ "zIndex": 999,
+ "width": 256,
+ "height": 49,
+ "measured": {
+ "width": 258,
+ "height": 49
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -377.3175069304428,
+ "y": 2026.2548214022338
+ }
+ },
+ {
+ "id": "NC75JWJMKXeQB2fTo0ZQJ",
+ "type": "label",
+ "position": {
+ "x": -619.1381872719935,
+ "y": 1835.7548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Design",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000"
+ },
+ "zIndex": 999,
+ "style": {},
+ "measured": {
+ "width": 70,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 70,
+ "height": 36,
+ "positionAbsolute": {
+ "x": -619.1381872719935,
+ "y": 1835.7548214022338
+ }
+ },
+ {
+ "id": "ccpT9MPFbc3Ewjm1tFMsZ",
+ "type": "subtopic",
+ "position": {
+ "x": -697.6381872719935,
+ "y": 1878.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Design Editor",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "TiCNCRpMPgZUhn7JdaIZA"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -697.6381872719935,
+ "y": 1878.2548214022338
+ }
+ },
+ {
+ "id": "uO-2O0Jwh_DxrMAB9wxp1",
+ "type": "subtopic",
+ "position": {
+ "x": -697.6381872719935,
+ "y": 1931.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Plugins",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "TiCNCRpMPgZUhn7JdaIZA"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -697.6381872719935,
+ "y": 1931.2548214022338
+ }
+ },
+ {
+ "id": "CYY6nbQiC2pu5ATWmO6wA",
+ "type": "subtopic",
+ "position": {
+ "x": -697.6381872719935,
+ "y": 1984.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Version Control",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "TiCNCRpMPgZUhn7JdaIZA"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -697.6381872719935,
+ "y": 1984.2548214022338
+ }
+ },
+ {
+ "id": "TiCNCRpMPgZUhn7JdaIZA",
+ "type": "subtopic",
+ "position": {
+ "x": -697.6381872719935,
+ "y": 2037.2548214022338
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Contribution Guidelines",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "7n61402xwhIgJ7dPHg8q7"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -697.6381872719935,
+ "y": 2037.2548214022338
+ }
+ },
+ {
+ "id": "L5re9KKWvMfS9f-uggNPN",
+ "type": "section",
+ "position": {
+ "x": -711.6381872719935,
+ "y": 2098.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ },
+ "oldId": "21pccUw8Y00FpFjxJXFsS"
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 256,
+ "height": 593
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -711.6381872719935,
+ "y": 2098.4551467174065
+ }
+ },
+ {
+ "id": "sD6J4uY0G7YNLCVoQkxmg",
+ "type": "label",
+ "position": {
+ "x": -642.1381872719935,
+ "y": 2104.7548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Development",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "NC75JWJMKXeQB2fTo0ZQJ"
+ },
+ "zIndex": 999,
+ "style": {},
+ "measured": {
+ "width": 118,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 118,
+ "height": 36,
+ "positionAbsolute": {
+ "x": -642.1381872719935,
+ "y": 2104.7548214022336
+ }
+ },
+ {
+ "id": "VeLiPzbGr22_Mh_8T2Gnf",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2147.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Component Catalog",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ccpT9MPFbc3Ewjm1tFMsZ"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2147.2548214022336
+ }
+ },
+ {
+ "id": "k1Lwk_b6cLIeyQwc4RUh1",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2200.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Documentation",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "uO-2O0Jwh_DxrMAB9wxp1"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2200.2548214022336
+ }
+ },
+ {
+ "id": "zEqFAuH9zmKTLwwgx54pW",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2253.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Code Style",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "CYY6nbQiC2pu5ATWmO6wA"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2253.2548214022336
+ }
+ },
+ {
+ "id": "y8No8I0MltA91j4Q2toT0",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2306.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Unit Testing",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "xJ1LAAhiZvbZOLRVc1HZa"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2306.2548214022336
+ }
+ },
+ {
+ "id": "yhP8EhyCWWRBLkYPyOFeg",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2359.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Accessibility Testing",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "xJ1LAAhiZvbZOLRVc1HZa"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2359.2548214022336
+ }
+ },
+ {
+ "id": "ZLt1yJqinC8OSpqucC2dV",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2412.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Semantic Versioning",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "xJ1LAAhiZvbZOLRVc1HZa"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2412.2548214022336
+ }
+ },
+ {
+ "id": "CfWCQNaCJGL-egRhFhc4B",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2465.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Release Strategy",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "xJ1LAAhiZvbZOLRVc1HZa"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2465.2548214022336
+ }
+ },
+ {
+ "id": "IVYe8oh1IWbUbxMZRxVQA",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2518.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Commit Guidelines",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "xJ1LAAhiZvbZOLRVc1HZa"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2518.2548214022336
+ }
+ },
+ {
+ "id": "wd9ZHZmqV7wbLN-9V4EQy",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2571.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "PR Templates",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "xJ1LAAhiZvbZOLRVc1HZa"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2571.2548214022336
+ }
+ },
+ {
+ "id": "xJ1LAAhiZvbZOLRVc1HZa",
+ "type": "subtopic",
+ "position": {
+ "x": -696.6381872719935,
+ "y": 2624.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Contribution Guidelines",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "TiCNCRpMPgZUhn7JdaIZA"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 227,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -696.6381872719935,
+ "y": 2624.2548214022336
+ }
+ },
+ {
+ "id": "JfXwzkN29UGz17FYHHE3A",
+ "type": "topic",
+ "position": {
+ "x": -379.3175069304428,
+ "y": 2463.9551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Project Management",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "4U-HZQGH7kaWCB94Xy8Mh"
+ },
+ "zIndex": 999,
+ "width": 206,
+ "height": 49,
+ "measured": {
+ "width": 258,
+ "height": 49
+ },
+ "dragging": false,
+ "resizing": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -379.3175069304428,
+ "y": 2463.9551467174065
+ }
+ },
+ {
+ "id": "TWx2jJqOyI3CXCOTQ106_",
+ "type": "section",
+ "position": {
+ "x": -24.638187271993502,
+ "y": 2431.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "",
+ "style": {
+ "fontSize": 17,
+ "backgroundColor": "#ffffff",
+ "borderColor": "#000000"
+ },
+ "oldId": "21pccUw8Y00FpFjxJXFsS"
+ },
+ "zIndex": -999,
+ "width": 150,
+ "height": 100,
+ "style": {
+ "width": 150,
+ "height": 100
+ },
+ "measured": {
+ "width": 375,
+ "height": 114
+ },
+ "resizing": true,
+ "focusable": true,
+ "dragging": false,
+ "positionAbsolute": {
+ "x": -24.638187271993502,
+ "y": 2431.4551467174065
+ }
+ },
+ {
+ "id": "POeLL32wtfV3SmBcVWzy6",
+ "type": "label",
+ "position": {
+ "x": 76.8618127280065,
+ "y": 2439.7548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Task Management",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "TM0coCBRbsUVXRNb--KnY"
+ },
+ "zIndex": 999,
+ "style": {},
+ "measured": {
+ "width": 158,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 158,
+ "height": 36,
+ "positionAbsolute": {
+ "x": 76.8618127280065,
+ "y": 2439.7548214022336
+ }
+ },
+ {
+ "id": "gMrX5600JqFDplriq-eU3",
+ "type": "subtopic",
+ "position": {
+ "x": -9.638187271993502,
+ "y": 2482.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Roadmap",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "xYqDmDpjwkShtL86nt-vY"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 110,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -9.638187271993502,
+ "y": 2482.2548214022336
+ }
+ },
+ {
+ "id": "ruPXxVwmD9vSlS7rBZmA-",
+ "type": "subtopic",
+ "position": {
+ "x": 104.3618127280065,
+ "y": 2482.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Milestones",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "uO-2O0Jwh_DxrMAB9wxp1"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 114,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 104.3618127280065,
+ "y": 2482.2548214022336
+ }
+ },
+ {
+ "id": "i39J0fk4DaPeNFIMbH0ap",
+ "type": "subtopic",
+ "position": {
+ "x": 222.3618127280065,
+ "y": 2482.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Ticketing",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "CYY6nbQiC2pu5ATWmO6wA"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 118,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 222.3618127280065,
+ "y": 2482.2548214022336
+ }
+ },
+ {
+ "id": "ZnwVo1kqK9awZCwFd2Vti",
+ "type": "label",
+ "position": {
+ "x": 113.8618127280065,
+ "y": 2549.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Analytics",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "TM0coCBRbsUVXRNb--KnY"
+ },
+ "zIndex": 999,
+ "style": {},
+ "measured": {
+ "width": 84,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 84,
+ "height": 36,
+ "positionAbsolute": {
+ "x": 113.8618127280065,
+ "y": 2549.2548214022336
+ }
+ },
+ {
+ "id": "G8dOkM_4hP7wPF3QJ8y4g",
+ "type": "subtopic",
+ "position": {
+ "x": -10.31750693044279,
+ "y": 2601.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Component Analytics",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "5znnOkpf9G9tdiMWB6Rut"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 223,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -10.31750693044279,
+ "y": 2601.2548214022336
+ }
+ },
+ {
+ "id": "xYqDmDpjwkShtL86nt-vY",
+ "type": "subtopic",
+ "position": {
+ "x": 219.6824930695572,
+ "y": 2601.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Logging",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "ccpT9MPFbc3Ewjm1tFMsZ"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 117,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 219.6824930695572,
+ "y": 2601.2548214022336
+ }
+ },
+ {
+ "id": "qiJGYYWL4naJX-MgZA9Ms",
+ "type": "subtopic",
+ "position": {
+ "x": -10.31750693044279,
+ "y": 2654.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Tooling Analytics",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cpAeotBxN8BCsU9RqTEue"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 347,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -10.31750693044279,
+ "y": 2654.2548214022336
+ }
+ },
+ {
+ "id": "5znnOkpf9G9tdiMWB6Rut",
+ "type": "subtopic",
+ "position": {
+ "x": -10.31750693044279,
+ "y": 2707.2548214022336
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Service and Health Metrics",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "xYqDmDpjwkShtL86nt-vY"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 347,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -10.31750693044279,
+ "y": 2707.2548214022336
+ }
+ },
+ {
+ "id": "TM0coCBRbsUVXRNb--KnY",
+ "type": "label",
+ "position": {
+ "x": 108.33384908709439,
+ "y": 2779.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Communications",
+ "style": {
+ "fontSize": 17
+ },
+ "href": "",
+ "color": "#000000",
+ "oldId": "NC75JWJMKXeQB2fTo0ZQJ"
+ },
+ "zIndex": 999,
+ "style": {},
+ "measured": {
+ "width": 144,
+ "height": 38
+ },
+ "dragging": false,
+ "focusable": true,
+ "width": 144,
+ "height": 36,
+ "positionAbsolute": {
+ "x": 108.33384908709439,
+ "y": 2779.4551467174065
+ }
+ },
+ {
+ "id": "eG8ranXuINtcqWfeMH5GW",
+ "type": "subtopic",
+ "position": {
+ "x": -9.638187271993502,
+ "y": 2819.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Community Meetings",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cpAeotBxN8BCsU9RqTEue"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 347,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -9.638187271993502,
+ "y": 2819.4551467174065
+ }
+ },
+ {
+ "id": "LWrrKrhwXfMDKgbFW5DuO",
+ "type": "subtopic",
+ "position": {
+ "x": -9.638187271993502,
+ "y": 2872.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Communication Channel",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cpAeotBxN8BCsU9RqTEue"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 347,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -9.638187271993502,
+ "y": 2872.4551467174065
+ }
+ },
+ {
+ "id": "YWoPoO9IW3vLZyxLL2fnT",
+ "type": "subtopic",
+ "position": {
+ "x": -9.638187271993502,
+ "y": 2925.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "Open Hours",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "cpAeotBxN8BCsU9RqTEue"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 240,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": -9.638187271993502,
+ "y": 2925.4551467174065
+ }
+ },
+ {
+ "id": "cpAeotBxN8BCsU9RqTEue",
+ "type": "subtopic",
+ "position": {
+ "x": 236.6824930695572,
+ "y": 2925.4551467174065
+ },
+ "selected": false,
+ "selectable": true,
+ "draggable": true,
+ "deletable": true,
+ "data": {
+ "label": "FAQs",
+ "style": {
+ "fontSize": 17,
+ "justifyContent": "flex-start",
+ "textAlign": "center"
+ },
+ "oldId": "5znnOkpf9G9tdiMWB6Rut"
+ },
+ "zIndex": 999,
+ "width": 303,
+ "height": 49,
+ "style": {
+ "width": 303
+ },
+ "measured": {
+ "width": 100,
+ "height": 49
+ },
+ "resizing": false,
+ "dragging": false,
+ "focusable": true,
+ "positionAbsolute": {
+ "x": 236.6824930695572,
+ "y": 2925.4551467174065
+ }
+ },
+ {
+ "width": 380,
+ "height": 49,
+ "id": "f5WRewBlpeYMf71cPcXs-",
+ "type": "button",
+ "position": {
+ "x": -304.62298223659093,
+ "y": 2938.4551467174065
+ },
+ "selected": false,
+ "data": {
+ "label": "UX Design",
+ "href": "https://roadmap.sh/ux-desing",
+ "color": "#FFf",
+ "backgroundColor": "#4136D6",
+ "style": {
+ "fontSize": 17
+ },
+ "borderColor": "#4136D6",
+ "oldId": "StxLh1r3qXqyRSqfJGird"
+ },
+ "zIndex": 999,
+ "dragging": false,
+ "positionAbsolute": {
+ "x": -304.62298223659093,
+ "y": 2938.4551467174065
+ },
+ "style": {
+ "width": 380,
+ "height": 49
+ },
+ "focusable": true,
+ "resizing": false,
+ "selectable": true,
+ "measured": {
+ "width": 187,
+ "height": 49
+ }
+ }
+ ],
+ "edges": [
+ {
+ "style": {
+ "strokeDasharray": "0",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "HU7wZWiES3m3xl1-NYP6F",
+ "sourceHandle": "x2",
+ "target": "uvnV1IjE8RV-FKDxHntUU",
+ "targetHandle": "w1",
+ "data": {
+ "edgeStyle": "solid"
+ },
+ "id": "xy-edge__HU7wZWiES3m3xl1-NYP6Fx2-08qKtgnhJ3tlb5JKfTDf5w1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "uvnV1IjE8RV-FKDxHntUU",
+ "sourceHandle": "z2",
+ "target": "2rlmLn_yQQV-7DpX1qT98",
+ "targetHandle": "y2",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__4U-HZQGH7kaWCB94Xy8Mhz2-2rlmLn_yQQV-7DpX1qT98y2",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "uvnV1IjE8RV-FKDxHntUU",
+ "sourceHandle": "z2",
+ "target": "4PrkkoZ5fY-oow0O-bVhu",
+ "targetHandle": "y1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__4U-HZQGH7kaWCB94Xy8Mhz2-cMfsRtvzvDZZJ0TqeUOxmy1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "uvnV1IjE8RV-FKDxHntUU",
+ "sourceHandle": "z2",
+ "target": "J5mU0v491qrm-mr1W3Msd",
+ "targetHandle": "y2",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__4U-HZQGH7kaWCB94Xy8Mhz2-VhSEH_RoWFt1z2lial7xZy2",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "uvnV1IjE8RV-FKDxHntUU",
+ "sourceHandle": "z2",
+ "target": "6r9XbwlBtHmJrhviG2cTD",
+ "targetHandle": "y2",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Az2-6r9XbwlBtHmJrhviG2cTDy2",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "uvnV1IjE8RV-FKDxHntUU",
+ "sourceHandle": "z2",
+ "target": "_3_tFOpQisx6DSP4Yc2E2",
+ "targetHandle": "y1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Az2-ODQ8zrHc2rsc8PN-APKvzy1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "uvnV1IjE8RV-FKDxHntUU",
+ "sourceHandle": "z2",
+ "target": "hauTvrBOAHgrUnO_m_kDM",
+ "targetHandle": "y1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Az2-ODQ8zrHc2rsc8PN-APKvzy1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "uvnV1IjE8RV-FKDxHntUU",
+ "sourceHandle": "x2",
+ "target": "de0TKvmFTDmKGZc5X7iFq",
+ "targetHandle": "w2",
+ "data": {
+ "edgeStyle": "solid"
+ },
+ "id": "xy-edge__uvnV1IjE8RV-FKDxHntUUx2-JfXwzkN29UGz17FYHHE3Aw2",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "de0TKvmFTDmKGZc5X7iFq",
+ "sourceHandle": "y2",
+ "target": "97cpJyKBKNAq1P_pQZH-t",
+ "targetHandle": "z2",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Ay2-97cpJyKBKNAq1P_pQZH-tz2",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "vJ4WytrzY7j10mo8S3O1u",
+ "sourceHandle": "z2",
+ "target": "de0TKvmFTDmKGZc5X7iFq",
+ "targetHandle": "y1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__vJ4WytrzY7j10mo8S3O1uz2-JfXwzkN29UGz17FYHHE3Ay1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "de0TKvmFTDmKGZc5X7iFq",
+ "sourceHandle": "y2",
+ "target": "fPUuXrlchna3K00KcY4O6",
+ "targetHandle": "z1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Ay2-fPUuXrlchna3K00KcY4O6z1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "kifE3JE2immnU1O3-toZf",
+ "sourceHandle": "z2",
+ "target": "de0TKvmFTDmKGZc5X7iFq",
+ "targetHandle": "y1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__kifE3JE2immnU1O3-toZfz2-JfXwzkN29UGz17FYHHE3Ay1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "de0TKvmFTDmKGZc5X7iFq",
+ "sourceHandle": "y2",
+ "target": "mlBzJ2YvBr9QuOthKdj0p",
+ "targetHandle": "z1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Ay2-mlBzJ2YvBr9QuOthKdj0pz1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "de0TKvmFTDmKGZc5X7iFq",
+ "sourceHandle": "y2",
+ "target": "7xPT8rUX3hjSWbxH_FfQs",
+ "targetHandle": "z1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Ay2-7xPT8rUX3hjSWbxH_FfQsz1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "4dzoZmkNHPedgLqLy93t8",
+ "sourceHandle": "z2",
+ "target": "de0TKvmFTDmKGZc5X7iFq",
+ "targetHandle": "y2",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__4dzoZmkNHPedgLqLy93t8z2-JfXwzkN29UGz17FYHHE3Ay2",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "jETJVuS_EczJiQASLqaQr",
+ "sourceHandle": "z2",
+ "target": "de0TKvmFTDmKGZc5X7iFq",
+ "targetHandle": "y1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__jETJVuS_EczJiQASLqaQrz2-JfXwzkN29UGz17FYHHE3Ay1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "lUObv2N7eH3Jdnwwd5vmI",
+ "sourceHandle": "z2",
+ "target": "de0TKvmFTDmKGZc5X7iFq",
+ "targetHandle": "y1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__cMfsRtvzvDZZJ0TqeUOxmz2-JfXwzkN29UGz17FYHHE3Ay1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "de0TKvmFTDmKGZc5X7iFq",
+ "sourceHandle": "x2",
+ "target": "dUaoMARPabiD4DRqdkaer",
+ "targetHandle": "w1",
+ "data": {
+ "edgeStyle": "solid"
+ },
+ "id": "xy-edge__de0TKvmFTDmKGZc5X7iFqx2-JfXwzkN29UGz17FYHHE3Aw1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "dUaoMARPabiD4DRqdkaer",
+ "sourceHandle": "z2",
+ "target": "-9I3fTpnQlmcZmIIuQiPe",
+ "targetHandle": "y1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Az2--9I3fTpnQlmcZmIIuQiPey1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "dUaoMARPabiD4DRqdkaer",
+ "sourceHandle": "z2",
+ "target": "z5gBy7BjlBKwbYbxXtoDA",
+ "targetHandle": "y2",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Az2-ODQ8zrHc2rsc8PN-APKvzy2",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "dUaoMARPabiD4DRqdkaer",
+ "sourceHandle": "x2",
+ "target": "8eWhvW2zDIxMGHaXl0Y9i",
+ "targetHandle": "w1",
+ "data": {
+ "edgeStyle": "solid"
+ },
+ "id": "xy-edge__dUaoMARPabiD4DRqdkaerx2-JfXwzkN29UGz17FYHHE3Aw1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "8eWhvW2zDIxMGHaXl0Y9i",
+ "sourceHandle": "y2",
+ "target": "ILRDAnpfGHCZq-FBlbfDO",
+ "targetHandle": "z1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Ay2-ILRDAnpfGHCZq-FBlbfDOz1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "8eWhvW2zDIxMGHaXl0Y9i",
+ "sourceHandle": "y2",
+ "target": "pRJ9wEPNfFx_6EYB501vk",
+ "targetHandle": "z1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Ay2-pRJ9wEPNfFx_6EYB501vkz1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "8eWhvW2zDIxMGHaXl0Y9i",
+ "sourceHandle": "y2",
+ "target": "-b4GjLpL_ppDMJSiChTef",
+ "targetHandle": "z1",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__JfXwzkN29UGz17FYHHE3Ay2-cMfsRtvzvDZZJ0TqeUOxmz1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "zSv63LkcNpHjAMB4eZewE",
+ "sourceHandle": "x2",
+ "target": "JnaNZ9MfMrXQrjW2wABzB",
+ "targetHandle": "w1",
+ "data": {
+ "edgeStyle": "solid"
+ },
+ "id": "xy-edge__zSv63LkcNpHjAMB4eZewEx2-JfXwzkN29UGz17FYHHE3Aw1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "JnaNZ9MfMrXQrjW2wABzB",
+ "sourceHandle": "x2",
+ "target": "a53cl6ZKvYXxG25Ii2_zu",
+ "targetHandle": "w1",
+ "data": {
+ "edgeStyle": "solid"
+ },
+ "id": "xy-edge__JnaNZ9MfMrXQrjW2wABzBx2-JfXwzkN29UGz17FYHHE3Aw1",
+ "selected": false,
+ "focusable": true,
+ "selectable": true
+ },
+ {
+ "style": {
+ "strokeDasharray": "0.8 8",
+ "strokeLinecap": "round",
+ "strokeWidth": 3.5,
+ "stroke": "#2b78e4"
+ },
+ "source": "TWx2jJqOyI3CXCOTQ106_",
+ "sourceHandle": "y2",
+ "target": "JfXwzkN29UGz17FYHHE3A",
+ "targetHandle": "z2",
+ "data": {
+ "edgeStyle": "dashed"
+ },
+ "id": "xy-edge__TWx2jJqOyI3CXCOTQ106_y2-JfXwzkN29UGz17FYHHE3Az2",
+ "selected": false,
+ "focusable": true
+ }
+ ]
}
\ No newline at end of file
diff --git a/src/data/roadmaps/design-system/design-system.md b/src/data/roadmaps/design-system/design-system.md
index bf59c34b4..1523557ee 100644
--- a/src/data/roadmaps/design-system/design-system.md
+++ b/src/data/roadmaps/design-system/design-system.md
@@ -5,13 +5,14 @@ order: 13
briefTitle: 'Design System'
briefDescription: 'Step by step guide to building a modern Design System'
title: 'Design System'
+renderer: 'editor'
description: 'Learn how to create a design system with this step by step guide'
isNew: false
hasTopics: true
note: '**Note:** System Design is a different topic, visit [System Design roadmap](/system-design) for that.'
dimensions:
width: 968
- height: 2309.7
+ height: 2900
schema:
headline: 'Design System Roadmap'
description: 'Learn how to create a Design System with this interactive step by step guide in 2025. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.'
diff --git a/src/data/roadmaps/design-system/migration-mapping.json b/src/data/roadmaps/design-system/migration-mapping.json
new file mode 100644
index 000000000..f9710bf6e
--- /dev/null
+++ b/src/data/roadmaps/design-system/migration-mapping.json
@@ -0,0 +1,112 @@
+{
+ "design-system-basics": "uvnV1IjE8RV-FKDxHntUU",
+ "design-system-basics:what-is-design-system": "4PrkkoZ5fY-oow0O-bVhu",
+ "design-system-basics:need-of-design-system": "2rlmLn_yQQV-7DpX1qT98",
+ "design-system-basics:atomic-design": "6r9XbwlBtHmJrhviG2cTD",
+ "design-system-basics:design-system-vs-component-library": "J5mU0v491qrm-mr1W3Msd",
+ "design-system-basics:stakeholders-involved": "_3_tFOpQisx6DSP4Yc2E2",
+ "design-system-basics:design-system-examples": "hauTvrBOAHgrUnO_m_kDM",
+ "design-system-terminology": "de0TKvmFTDmKGZc5X7iFq",
+ "design-system-terminology:component": "97cpJyKBKNAq1P_pQZH-t",
+ "design-system-terminology:component-library": "vJ4WytrzY7j10mo8S3O1u",
+ "design-system-terminology:design-language": "fPUuXrlchna3K00KcY4O6",
+ "design-system-terminology:governance": "kifE3JE2immnU1O3-toZf",
+ "design-system-terminology:guidelines": "mlBzJ2YvBr9QuOthKdj0p",
+ "design-system-terminology:pattern": "7xPT8rUX3hjSWbxH_FfQs",
+ "design-system-terminology:pilot": "4dzoZmkNHPedgLqLy93t8",
+ "design-system-terminology:token": "jETJVuS_EczJiQASLqaQr",
+ "design-system-terminology:ui-kit": "lUObv2N7eH3Jdnwwd5vmI",
+ "making-a-design-system": "dUaoMARPabiD4DRqdkaer",
+ "making-a-design-system:from-scratch": "-9I3fTpnQlmcZmIIuQiPe",
+ "making-a-design-system:from-existing-design": "z5gBy7BjlBKwbYbxXtoDA",
+ "existing-design-analysis": "8eWhvW2zDIxMGHaXl0Y9i",
+ "existing-design-analysis:existing-design-process": "CnsDoZ3gIaPeNbwHuZXYJ",
+ "existing-design-analysis:visual-audit": "NKm-gXbt5Y7dDwKVkPHjX",
+ "existing-design-analysis:ab-tests-and-experiments": "ILRDAnpfGHCZq-FBlbfDO",
+ "existing-design-analysis:regional-requirements": "pRJ9wEPNfFx_6EYB501vk",
+ "existing-design-analysis:documentation": "-b4GjLpL_ppDMJSiChTef",
+ "design-language": "JnaNZ9MfMrXQrjW2wABzB",
+ "design-language:brand:writing-guidelines": "toyNbBB5tbyiJZkzuklIv",
+ "design-language:brand:tone-of-voice": "fnlVIgsmyxj2UVCCjM-8g",
+ "design-language:brand:terminology": "Zspu1SsuTE34PVmYePcs4",
+ "design-language:brand:design-principles": "1RJrMVJf_3clM7E5OML-f",
+ "design-language:brand:vision": "cMfsRtvzvDZZJ0TqeUOxm",
+ "design-language:logo:monochrome-version": "Wn8CylBz-hyl9-iXcUVTO",
+ "design-language:logo:small-use-guidance": "FA3JsZgNhKrgNHVtVreol",
+ "design-language:logo:placement-and-clearance-guidance": "7n61402xwhIgJ7dPHg8q7",
+ "design-language:logo:usage-guidance": "RmSFwKqL9yXXxGKZusKWX",
+ "design-language:logo:different-file-formats": "-6LPUMRm-SqvRVEWPDFl8",
+ "design-language:guidelines:accessibility": "aLtOGjNFxaRzg0PI-ed99",
+ "design-language:guidelines:user-onboarding": "PlW8mHnOTyYnbtl0zUSG9",
+ "design-language:guidelines:microcopy-guidelines": "bD-DjUbAA6l2eK1R9ITcK",
+ "design-tokens": "a53cl6ZKvYXxG25Ii2_zu",
+ "design-tokens:color:accessibility": "fW0cEy2SB0HDbiF7QA7Ev",
+ "design-tokens:color:functional-colors": "__Pv19gRr2SFknVnfm0Mr",
+ "design-tokens:color:dark-mode": "kxUnqpydDwB73IwrCPZM0",
+ "design-tokens:color:guidelines": "XDfxs5cgjSuTEprZi2Z5b",
+ "design-tokens:layout:units": "wQbMhC7q3qdKYf_pX5qL4",
+ "design-tokens:layout:grid": "8f2V-rM7soorTTvNo5Vcx",
+ "design-tokens:layout:breakpoints": "djwnJq9Y_Hx1Ynw01wr_u",
+ "design-tokens:layout:spacing": "dXaYOwTAnYSlipNEBSV9l",
+ "design-tokens:iconography:accessibility": "DhrnZwQODG0P7D-27_3ec",
+ "design-tokens:iconography:style": "SPK1i0XuHpNEWyi1iIxrV",
+ "design-tokens:iconography:naming": "wiclAEEYioRgLmXFcKQ4E",
+ "design-tokens:iconography:grid-relation": "6Hmj_TeQ563jshqAAl__I",
+ "design-tokens:iconography:sizes": "w3LS85eFerscaxb2Xp-dP",
+ "design-tokens:iconography:keywords": "HDf2L4F1f8uUGpVaf7Y7z",
+ "design-tokens:iconography:reserved-icons": "Y0KxHVrcNGHDao-38Oz3w",
+ "design-tokens:iconography:guidelines": "eTxhpC3AQIMcUax6WFU9U",
+ "design-tokens:typography:responsiveness": "8YVCtgYRHR3VcpUJXMVwP",
+ "design-tokens:typography:grid-relation": "Zl7MVllzJgObruYtlibKf",
+ "design-tokens:typography:readability": "L2NHddsv5RGR_BW0I3f4T",
+ "design-tokens:typography:performance": "wFL9axjaPcVvI8XWduxgz",
+ "design-tokens:typography:guidelines": "Jab5LO0mGhTy1cU61Catu",
+ "core-components": "Hw_LQInG6OtSwDXch3Lvg",
+ "core-components:avatar": "h3TZY1yBkzLYUK6W7K7xs",
+ "core-components:banner": "kkqRIgdXWaJbX9CjLpwha",
+ "core-components:badge": "LNsXQI8sE_5kzSD_iMLJA",
+ "core-components:button": "LWihkf4q5UawjLd84KQxN",
+ "core-components:card": "rZ7d1C9swiqlRTbdJLZ0R",
+ "core-components:carousel": "yWEXfjzuzk99dxjZlG4Cq",
+ "core-components:dropdown": "MtBSvKoyjdLd6DIdolLRi",
+ "core-components:icon": "bzY_iXRnotct_WnNRTlbd",
+ "core-components:input-checkbox": "F5_sxUnnGEdgF6BkA5T5x",
+ "core-components:input-radio": "rN-_plAA5FkcQl03wsL18",
+ "core-components:input-text": "hjiJJg4KNr8lyktFQd868",
+ "core-components:input-switch": "NISeaJUlDtQ0kSuyxmrOT",
+ "core-components:select": "n1nUkMqGtPobZPJHCvPsk",
+ "core-components:textarea": "iusI39fxcu2rbMXiosaM6",
+ "core-components:list": "2T7tiM3Ew3H1U5iJR2TDb",
+ "core-components:loading-indicator": "JhnHOMIlU6mQcwvIpErUY",
+ "core-components:modal": "IjNitkG25vNo30rB4ckNV",
+ "core-components:tabs": "1vYR1EMyZhJA-znxnFBBb",
+ "core-components:toast": "-T7uL6a3lJ5-IIcDaG6IN",
+ "core-components:tooltip": "2oCAzsk_y2Y2oHUi467dp",
+ "tooling": "jggrr5nZOe6FY3ZrZJTOw",
+ "tooling:development:component-catalog": "VeLiPzbGr22_Mh_8T2Gnf",
+ "tooling:development:documentation": "k1Lwk_b6cLIeyQwc4RUh1",
+ "tooling:development:code-style": "zEqFAuH9zmKTLwwgx54pW",
+ "tooling:development:unit-testing": "y8No8I0MltA91j4Q2toT0",
+ "tooling:development:accessibility-testing": "yhP8EhyCWWRBLkYPyOFeg",
+ "tooling:development:semantic-versioning": "ZLt1yJqinC8OSpqucC2dV",
+ "tooling:development:release-strategy": "CfWCQNaCJGL-egRhFhc4B",
+ "tooling:development:commit-guidelines": "IVYe8oh1IWbUbxMZRxVQA",
+ "tooling:development:pr-templates": "wd9ZHZmqV7wbLN-9V4EQy",
+ "tooling:development:contribution-guidelines": "xJ1LAAhiZvbZOLRVc1HZa",
+ "tooling:design:design-editor": "ccpT9MPFbc3Ewjm1tFMsZ",
+ "tooling:design:plugins": "uO-2O0Jwh_DxrMAB9wxp1",
+ "tooling:design:version-control": "CYY6nbQiC2pu5ATWmO6wA",
+ "tooling:design:contribution-guidelines": "TiCNCRpMPgZUhn7JdaIZA",
+ "project-management:task-management:roadmap": "gMrX5600JqFDplriq-eU3",
+ "project-management:task-management:milestones": "ruPXxVwmD9vSlS7rBZmA-",
+ "project-management:task-management:ticketing": "i39J0fk4DaPeNFIMbH0ap",
+ "project-management:analytics:component-analytics": "G8dOkM_4hP7wPF3QJ8y4g",
+ "project-management:analytics:error-logging": "xYqDmDpjwkShtL86nt-vY",
+ "project-management:analytics:tooling-analytics": "qiJGYYWL4naJX-MgZA9Ms",
+ "project-management:analytics:service-and-health-metrics": "5znnOkpf9G9tdiMWB6Rut",
+ "project-management:communications:community-meetings": "eG8ranXuINtcqWfeMH5GW",
+ "project-management:communications:communication-channel": "LWrrKrhwXfMDKgbFW5DuO",
+ "project-management:communications:open-hours": "YWoPoO9IW3vLZyxLL2fnT",
+ "project-management:communications:faqs": "cpAeotBxN8BCsU9RqTEue",
+ "project-management": "JfXwzkN29UGz17FYHHE3A"
+}
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/advanced-topics@expert-level.md b/src/data/roadmaps/golang/content/advanced-topics@expert-level.md
new file mode 100644
index 000000000..bf027f3ce
--- /dev/null
+++ b/src/data/roadmaps/golang/content/advanced-topics@expert-level.md
@@ -0,0 +1,3 @@
+# Advanced Topics
+
+Advanced Go topics include memory management, escape analysis, reflection, unsafe operations, CGO, and performance optimization. These sophisticated features enable building high-performance systems and solving specialized problems requiring deep language knowledge. While not needed for typical development, mastering these topics helps leverage Go's full capabilities.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/anonymous-functions@cEQ9NQX7ZkKLwz_hg9L_7.md b/src/data/roadmaps/golang/content/anonymous-functions@cEQ9NQX7ZkKLwz_hg9L_7.md
new file mode 100644
index 000000000..ff7a4e692
--- /dev/null
+++ b/src/data/roadmaps/golang/content/anonymous-functions@cEQ9NQX7ZkKLwz_hg9L_7.md
@@ -0,0 +1,3 @@
+# Anonymous Functions
+
+Functions declared without names, also called function literals or lambdas. Can be assigned to variables, passed as arguments, or executed immediately. Useful for short operations, callbacks, goroutines, and closures. Access enclosing scope variables. Common in event handlers and functional patterns.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/array-to-slice-conversion@s1E4PQVVSlBeyNn7xBikW.md b/src/data/roadmaps/golang/content/array-to-slice-conversion@s1E4PQVVSlBeyNn7xBikW.md
new file mode 100644
index 000000000..1d705ac7d
--- /dev/null
+++ b/src/data/roadmaps/golang/content/array-to-slice-conversion@s1E4PQVVSlBeyNn7xBikW.md
@@ -0,0 +1,3 @@
+# Array to Slice Conversion
+
+Convert arrays to slices using expressions like `array[:]` or `array[start:end]`. Creates slice header pointing to array memory - no data copying. Modifications through slice affect original array. Efficient way to use arrays with slice-based APIs.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/arrays@Eu8JV-_W-P_bCx_PglIW0.md b/src/data/roadmaps/golang/content/arrays@Eu8JV-_W-P_bCx_PglIW0.md
new file mode 100644
index 000000000..244ada525
--- /dev/null
+++ b/src/data/roadmaps/golang/content/arrays@Eu8JV-_W-P_bCx_PglIW0.md
@@ -0,0 +1,3 @@
+# Arrays
+
+Fixed-size sequences of same-type elements. Size is part of the type, so different sizes are different types. Declared with specific length, initialized to zero values. Value types (copied when assigned/passed). Slices are more commonly used due to flexibility. Foundation for understanding Go's type system.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/beego@p7yeYkbQKAjr2aA_eUno4.md b/src/data/roadmaps/golang/content/beego@p7yeYkbQKAjr2aA_eUno4.md
new file mode 100644
index 000000000..e6e63a410
--- /dev/null
+++ b/src/data/roadmaps/golang/content/beego@p7yeYkbQKAjr2aA_eUno4.md
@@ -0,0 +1,3 @@
+# beego
+
+Beego is a full-stack web framework providing MVC architecture, ORM, session management, caching, and admin interface generation. Follows convention over configuration with extensive tooling for rapid development of enterprise applications requiring comprehensive features.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/benchmarks@t9xOuLBrAzEvv2-bOU2hF.md b/src/data/roadmaps/golang/content/benchmarks@t9xOuLBrAzEvv2-bOU2hF.md
new file mode 100644
index 000000000..31a810752
--- /dev/null
+++ b/src/data/roadmaps/golang/content/benchmarks@t9xOuLBrAzEvv2-bOU2hF.md
@@ -0,0 +1,3 @@
+# Benchmarks
+
+Benchmarks measure code performance by timing repeated executions. Functions start with `Benchmark` and use `*testing.B` parameter. Run with `go test -bench=.` to identify bottlenecks, compare implementations, and track performance changes over time.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/boolean@PRTou83_rD0u7p2elGG4s.md b/src/data/roadmaps/golang/content/boolean@PRTou83_rD0u7p2elGG4s.md
new file mode 100644
index 000000000..4c5f144ac
--- /dev/null
+++ b/src/data/roadmaps/golang/content/boolean@PRTou83_rD0u7p2elGG4s.md
@@ -0,0 +1,3 @@
+# Boolean
+
+The `bool` type represents `true` or `false` values with default zero value of `false`. Essential for conditional logic, control flow, and binary states. Results from comparison (`==`, `!=`) and logical operations (`&&`, `||`, `!`).
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/break@IWdAJ1BXqJv8EMYvFWRaH.md b/src/data/roadmaps/golang/content/break@IWdAJ1BXqJv8EMYvFWRaH.md
new file mode 100644
index 000000000..4626de9cc
--- /dev/null
+++ b/src/data/roadmaps/golang/content/break@IWdAJ1BXqJv8EMYvFWRaH.md
@@ -0,0 +1,3 @@
+# break
+
+Immediately exits innermost loop or switch statement. In nested loops, only exits immediate loop unless used with labels to break outer loops. Essential for early termination when conditions are met. Helps write efficient loops that don't continue unnecessarily.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/bubbletea@x9hDkF73rmvbewrgRgyOv.md b/src/data/roadmaps/golang/content/bubbletea@x9hDkF73rmvbewrgRgyOv.md
new file mode 100644
index 000000000..01b72b856
--- /dev/null
+++ b/src/data/roadmaps/golang/content/bubbletea@x9hDkF73rmvbewrgRgyOv.md
@@ -0,0 +1,3 @@
+# bubbletea
+
+Bubble Tea is a framework for building terminal UIs based on The Elm Architecture. Uses model-update-view pattern for interactive CLI applications with keyboard input, styling, and component composition. Excellent for sophisticated terminal tools and dashboards.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/buffered-vs-unbuffered@4_nvU_YOs9Psey5TZLQFb.md b/src/data/roadmaps/golang/content/buffered-vs-unbuffered@4_nvU_YOs9Psey5TZLQFb.md
new file mode 100644
index 000000000..77e0ea13a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/buffered-vs-unbuffered@4_nvU_YOs9Psey5TZLQFb.md
@@ -0,0 +1,3 @@
+# Buffered vs Unbuffered
+
+Unbuffered channels provide synchronous communication - sender blocks until receiver ready. Buffered channels allow asynchronous communication up to capacity. Unbuffered for coordination/sequencing, buffered for performance/decoupling. Critical distinction for concurrent system design.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/bufio@Z8j6Zkg1LYEYcoRgs23Ms.md b/src/data/roadmaps/golang/content/bufio@Z8j6Zkg1LYEYcoRgs23Ms.md
new file mode 100644
index 000000000..ad20057eb
--- /dev/null
+++ b/src/data/roadmaps/golang/content/bufio@Z8j6Zkg1LYEYcoRgs23Ms.md
@@ -0,0 +1,3 @@
+# bufio
+
+Provides buffered I/O operations wrapping io.Reader/Writer interfaces for better performance. Reduces system calls by reading/writing larger chunks. Includes Scanner for line reading, Reader for buffered reading, Writer for buffered writing. Essential for efficient large file/network operations.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/build-constraints--tags@zmBYvecc5zSoLCinH68gc.md b/src/data/roadmaps/golang/content/build-constraints--tags@zmBYvecc5zSoLCinH68gc.md
new file mode 100644
index 000000000..9f54bfc6b
--- /dev/null
+++ b/src/data/roadmaps/golang/content/build-constraints--tags@zmBYvecc5zSoLCinH68gc.md
@@ -0,0 +1,3 @@
+# Build Constraints & Tags
+
+Special comments controlling which files are included when building. Use `//go:build` directive for platform-specific code, environment builds, or feature toggles. Common for different OS/architectures or debug vs production builds. Essential for portable Go applications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/build-tags@Jxt4HD2iA6lRXNRJIVCLs.md b/src/data/roadmaps/golang/content/build-tags@Jxt4HD2iA6lRXNRJIVCLs.md
new file mode 100644
index 000000000..a855e01dc
--- /dev/null
+++ b/src/data/roadmaps/golang/content/build-tags@Jxt4HD2iA6lRXNRJIVCLs.md
@@ -0,0 +1,3 @@
+# Build Tags
+
+Build tags control file inclusion using `//go:build` directives based on conditions like OS, architecture, or custom tags. Enable conditional compilation for platform-specific code, feature flags, and environment-specific builds without runtime overhead.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/building-clis@2fk1ewM42WnFlDejVETys.md b/src/data/roadmaps/golang/content/building-clis@2fk1ewM42WnFlDejVETys.md
new file mode 100644
index 000000000..b02200c30
--- /dev/null
+++ b/src/data/roadmaps/golang/content/building-clis@2fk1ewM42WnFlDejVETys.md
@@ -0,0 +1,3 @@
+# Building CLIs
+
+Go excels at CLI development due to fast compilation, single binary distribution, and rich ecosystem. Use standard `flag` package or frameworks like Cobra, urfave/cli, Bubble Tea. Cross-compilation support for multiple platforms. Great for learning Go while building useful tools.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/building-executables@zCUmPIGVslLfECqfUgAr2.md b/src/data/roadmaps/golang/content/building-executables@zCUmPIGVslLfECqfUgAr2.md
new file mode 100644
index 000000000..35c392599
--- /dev/null
+++ b/src/data/roadmaps/golang/content/building-executables@zCUmPIGVslLfECqfUgAr2.md
@@ -0,0 +1,3 @@
+# Building Executables
+
+The `go build` command compiles source code into standalone native executables with static linking. Creates self-contained binaries including all dependencies, requiring no Go installation on target systems. Control builds with various optimization flags.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/call-by-value@z8-8nt-3GA7uN-cvOI-Qn.md b/src/data/roadmaps/golang/content/call-by-value@z8-8nt-3GA7uN-cvOI-Qn.md
new file mode 100644
index 000000000..e61867624
--- /dev/null
+++ b/src/data/roadmaps/golang/content/call-by-value@z8-8nt-3GA7uN-cvOI-Qn.md
@@ -0,0 +1,3 @@
+# Call by Value
+
+Go creates copies of values when passing to functions, not references to originals. Applies to all types including structs and arrays. Provides safety but can be expensive for large data. Use pointers, slices, maps for references. Critical for performance optimization.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/capacity-and-growth@qUykEUH1-9Dzotc_ltV3g.md b/src/data/roadmaps/golang/content/capacity-and-growth@qUykEUH1-9Dzotc_ltV3g.md
new file mode 100644
index 000000000..8530c7114
--- /dev/null
+++ b/src/data/roadmaps/golang/content/capacity-and-growth@qUykEUH1-9Dzotc_ltV3g.md
@@ -0,0 +1,3 @@
+# Capacity and Growth
+
+Slice capacity determines when reallocation occurs during append operations. Go typically doubles capacity for smaller slices. Pre-allocate with `make([]T, length, capacity)` to optimize memory usage and minimize allocations in performance-critical code.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/centrifugo@LOl-7BtdmYrBS0PTtHI1I.md b/src/data/roadmaps/golang/content/centrifugo@LOl-7BtdmYrBS0PTtHI1I.md
new file mode 100644
index 000000000..90e9497e5
--- /dev/null
+++ b/src/data/roadmaps/golang/content/centrifugo@LOl-7BtdmYrBS0PTtHI1I.md
@@ -0,0 +1,3 @@
+# Centrifugo
+
+Centrifugo is a real-time messaging server providing WebSocket services for Go applications. It offers channels, presence info, message history, and Redis scalability. Supports WebSocket, Server-Sent Events, and HTTP streaming while handling complex real-time patterns.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/cgo-basics@mxbs96wFJ5XGDoETA0fU_.md b/src/data/roadmaps/golang/content/cgo-basics@mxbs96wFJ5XGDoETA0fU_.md
new file mode 100644
index 000000000..e03b4e1fb
--- /dev/null
+++ b/src/data/roadmaps/golang/content/cgo-basics@mxbs96wFJ5XGDoETA0fU_.md
@@ -0,0 +1,3 @@
+# CGO Basics
+
+CGO allows Go programs to call C code and vice versa using special comments. Enables C library integration but disables cross-compilation, reduces performance, and complicates deployment. Useful for legacy integration but pure Go is preferred.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/channels@EgXagvLpJkXUI2od5K1FD.md b/src/data/roadmaps/golang/content/channels@EgXagvLpJkXUI2od5K1FD.md
new file mode 100644
index 000000000..29c0b649d
--- /dev/null
+++ b/src/data/roadmaps/golang/content/channels@EgXagvLpJkXUI2od5K1FD.md
@@ -0,0 +1,3 @@
+# Channels
+
+Primary mechanism for goroutine communication following "share memory by communicating" principle. Typed conduits created with `make()`. Come in buffered and unbuffered varieties. Used for synchronization, data passing, and coordinating concurrent operations. Essential for concurrent programming.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/closures@ZSiNvYDTW2RYyPttls5iz.md b/src/data/roadmaps/golang/content/closures@ZSiNvYDTW2RYyPttls5iz.md
new file mode 100644
index 000000000..ab77801f6
--- /dev/null
+++ b/src/data/roadmaps/golang/content/closures@ZSiNvYDTW2RYyPttls5iz.md
@@ -0,0 +1,3 @@
+# Closures
+
+Functions capturing variables from surrounding scope, accessible even after outer function returns. "Close over" external variables for specialized functions, callbacks, state maintenance. Useful for event handling, iterators, functional programming. Important for flexible, reusable code.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/cobra@3frPZLeFXnHroY7_Uk5Dn.md b/src/data/roadmaps/golang/content/cobra@3frPZLeFXnHroY7_Uk5Dn.md
new file mode 100644
index 000000000..3844b704f
--- /dev/null
+++ b/src/data/roadmaps/golang/content/cobra@3frPZLeFXnHroY7_Uk5Dn.md
@@ -0,0 +1,3 @@
+# Cobra
+
+Powerful library for modern CLI applications. Used by kubectl, Hugo, GitHub CLI. Provides nested subcommands, flags, intelligent suggestions, auto help generation, shell completion. Follows POSIX standards with clean API. Includes command generator for quick bootstrapping.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/code-generation--build-tags@build-system.md b/src/data/roadmaps/golang/content/code-generation--build-tags@build-system.md
new file mode 100644
index 000000000..00356fccd
--- /dev/null
+++ b/src/data/roadmaps/golang/content/code-generation--build-tags@build-system.md
@@ -0,0 +1,3 @@
+# Code Generation / Build Tags
+
+Code generation with `go generate` automates boilerplate creation, while build tags enable conditional compilation for different platforms and environments. These tools help create flexible, maintainable applications with platform-specific implementations and feature flags without runtime overhead.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/code-quality-and-analysis@core-quality-tools.md b/src/data/roadmaps/golang/content/code-quality-and-analysis@core-quality-tools.md
new file mode 100644
index 000000000..9d5d9013c
--- /dev/null
+++ b/src/data/roadmaps/golang/content/code-quality-and-analysis@core-quality-tools.md
@@ -0,0 +1,3 @@
+# Code Quality and Analysis
+
+Go provides tools for maintaining code quality including static analyzers, style checkers, and security scanners. Built-in tools like `go vet` provide basic analysis, while ecosystem tools like staticcheck and golangci-lint offer advanced checking for bugs, style, and security issues.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/comma-ok-idiom@dMdOz2kUc8If3LcLZEfYf.md b/src/data/roadmaps/golang/content/comma-ok-idiom@dMdOz2kUc8If3LcLZEfYf.md
new file mode 100644
index 000000000..1b7c959d7
--- /dev/null
+++ b/src/data/roadmaps/golang/content/comma-ok-idiom@dMdOz2kUc8If3LcLZEfYf.md
@@ -0,0 +1,3 @@
+# Comma-Ok Idiom
+
+Pattern for safely testing map key existence or type assertion success using `value, ok := map[key]` or `value, ok := interface.(Type)`. Returns both value and boolean status, preventing panics and distinguishing zero values from missing keys.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/commands--docs@ywiNCAAvpSVXTwWwguxSZ.md b/src/data/roadmaps/golang/content/commands--docs@ywiNCAAvpSVXTwWwguxSZ.md
new file mode 100644
index 000000000..0febabb39
--- /dev/null
+++ b/src/data/roadmaps/golang/content/commands--docs@ywiNCAAvpSVXTwWwguxSZ.md
@@ -0,0 +1,3 @@
+# Commands & Docs
+
+Go provides built-in documentation tools including `go doc` for terminal documentation and `godoc` for web interface. Documentation uses special comments. `go help` provides command information. Essential for exploring standard library and writing well-documented code.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/common-usecases@gChqUzY3SbPJH0H0jcoAp.md b/src/data/roadmaps/golang/content/common-usecases@gChqUzY3SbPJH0H0jcoAp.md
new file mode 100644
index 000000000..6746f751a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/common-usecases@gChqUzY3SbPJH0H0jcoAp.md
@@ -0,0 +1,3 @@
+# Common Usecases
+
+Context package common uses: HTTP timeouts, database deadlines, goroutine cancellation coordination, and request-scoped values. Essential for web servers, microservices, circuit breakers, and building responsive APIs that handle cancellation gracefully.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/compiler--linker-flags@xsjUeyxweN2GbcjknDjT8.md b/src/data/roadmaps/golang/content/compiler--linker-flags@xsjUeyxweN2GbcjknDjT8.md
new file mode 100644
index 000000000..af4d04ff3
--- /dev/null
+++ b/src/data/roadmaps/golang/content/compiler--linker-flags@xsjUeyxweN2GbcjknDjT8.md
@@ -0,0 +1,3 @@
+# Compiler & Linker Flags
+
+Build flags control compilation and linking. Common flags include `-ldflags` for linker options, `-gcflags` for compiler settings, `-tags` for build tags, and `-race` for race detection. Help optimize builds, reduce binary size, and embed build information.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/complex-numbers@Mn-M7kxOKEublJGitgjNA.md b/src/data/roadmaps/golang/content/complex-numbers@Mn-M7kxOKEublJGitgjNA.md
new file mode 100644
index 000000000..906ef4ce1
--- /dev/null
+++ b/src/data/roadmaps/golang/content/complex-numbers@Mn-M7kxOKEublJGitgjNA.md
@@ -0,0 +1,3 @@
+# Complex Numbers
+
+Built-in support with `complex64` and `complex128` types. Create using `complex()` function or literals like `3+4i`. Provides `real()`, `imag()`, `abs()` functions. Useful for mathematical computations, signal processing, and scientific applications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/concurrency-patterns@2yKVKaCXrcv5X4o2d6oqm.md b/src/data/roadmaps/golang/content/concurrency-patterns@2yKVKaCXrcv5X4o2d6oqm.md
new file mode 100644
index 000000000..d4ded9b67
--- /dev/null
+++ b/src/data/roadmaps/golang/content/concurrency-patterns@2yKVKaCXrcv5X4o2d6oqm.md
@@ -0,0 +1,3 @@
+# Concurrency Patterns
+
+Established design approaches for structuring concurrent programs using goroutines and channels. Key patterns: fan-in (merging inputs), fan-out (distributing work), pipelines (chaining operations), worker pools, pub-sub communication. Help build efficient, scalable apps while avoiding race conditions and deadlocks.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/conditionals@C7wzT161ytHsCpO2zfmXo.md b/src/data/roadmaps/golang/content/conditionals@C7wzT161ytHsCpO2zfmXo.md
new file mode 100644
index 000000000..6c860afa0
--- /dev/null
+++ b/src/data/roadmaps/golang/content/conditionals@C7wzT161ytHsCpO2zfmXo.md
@@ -0,0 +1,3 @@
+# Conditionals
+
+Control program flow based on conditions. `if` for basic logic, `if-else` for binary decisions, `switch` for multiple conditions. `if` supports optional initialization, no parentheses needed but braces required. `switch` supports expressions, type switches, fallthrough. Fundamental for business logic.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/const-and-iota@-M-qrXwVt7HfJv0CSRNGS.md b/src/data/roadmaps/golang/content/const-and-iota@-M-qrXwVt7HfJv0CSRNGS.md
new file mode 100644
index 000000000..4b3ba3c93
--- /dev/null
+++ b/src/data/roadmaps/golang/content/const-and-iota@-M-qrXwVt7HfJv0CSRNGS.md
@@ -0,0 +1,3 @@
+# const and iota
+
+Constants declared with `const` represent unchanging compile-time values. `iota` creates successive integer constants starting from zero, resetting per `const` block. Useful for enumerations, bit flags, and constant sequences without manual values.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/context-package@vxB3aGreqWBrNhiu8hcPE.md b/src/data/roadmaps/golang/content/context-package@vxB3aGreqWBrNhiu8hcPE.md
new file mode 100644
index 000000000..19c651f43
--- /dev/null
+++ b/src/data/roadmaps/golang/content/context-package@vxB3aGreqWBrNhiu8hcPE.md
@@ -0,0 +1,3 @@
+# `context` Package
+
+Carries deadlines, cancellation signals, and request-scoped values across API boundaries. Essential for robust concurrent applications, especially web services. Enables cancelling long-running operations, setting timeouts, passing request data. Typically first parameter passed down call stack.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/continue@BRKryB5HawXyXeBWM4QqU.md b/src/data/roadmaps/golang/content/continue@BRKryB5HawXyXeBWM4QqU.md
new file mode 100644
index 000000000..a77b66192
--- /dev/null
+++ b/src/data/roadmaps/golang/content/continue@BRKryB5HawXyXeBWM4QqU.md
@@ -0,0 +1,3 @@
+# continue
+
+Skips rest of current iteration and jumps to next loop iteration. Only affects innermost loop unless used with labels. Useful for filtering elements, handling special cases early, avoiding nested conditionals. Makes loops cleaner and more efficient.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/coverage@27lhNAdKwRrc2S2ha3QNG.md b/src/data/roadmaps/golang/content/coverage@27lhNAdKwRrc2S2ha3QNG.md
new file mode 100644
index 000000000..8528185f0
--- /dev/null
+++ b/src/data/roadmaps/golang/content/coverage@27lhNAdKwRrc2S2ha3QNG.md
@@ -0,0 +1,3 @@
+# Coverage
+
+Test coverage measures code execution during testing using `go test -cover` and `-coverprofile`. Visualize with `go tool cover -html` to identify untested code paths. Helps maintain quality standards and guide testing efforts for more reliable applications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/cross-compilation@mvcWcecHA_jyQY1txFgL_.md b/src/data/roadmaps/golang/content/cross-compilation@mvcWcecHA_jyQY1txFgL_.md
new file mode 100644
index 000000000..e21ba4d95
--- /dev/null
+++ b/src/data/roadmaps/golang/content/cross-compilation@mvcWcecHA_jyQY1txFgL_.md
@@ -0,0 +1,3 @@
+# Cross-compilation
+
+Build executables for different OS and architectures using `GOOS` and `GOARCH` environment variables. Example: `GOOS=linux GOARCH=amd64 go build` creates Linux binaries. Enables multi-platform development without separate build environments.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/data-types@0FJxELyk7_IiVHvZFFVm2.md b/src/data/roadmaps/golang/content/data-types@0FJxELyk7_IiVHvZFFVm2.md
new file mode 100644
index 000000000..23e0ff1a7
--- /dev/null
+++ b/src/data/roadmaps/golang/content/data-types@0FJxELyk7_IiVHvZFFVm2.md
@@ -0,0 +1,3 @@
+# Data Types
+
+Rich set of built-in types: integers (int8-64), unsigned integers (uint8-64), floats (float32/64), complex numbers, booleans, strings, runes. Statically typed - types determined at compile time for early error detection and performance. Crucial for efficient, reliable programs.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/deadlines--cancellations@p5u2tWRmRtyfBgKcSUHFU.md b/src/data/roadmaps/golang/content/deadlines--cancellations@p5u2tWRmRtyfBgKcSUHFU.md
new file mode 100644
index 000000000..33836bb43
--- /dev/null
+++ b/src/data/roadmaps/golang/content/deadlines--cancellations@p5u2tWRmRtyfBgKcSUHFU.md
@@ -0,0 +1,3 @@
+# Deadlines & Cancellations
+
+Context package mechanisms for controlling operation lifetime and propagating cancellation signals. Supports deadlines (absolute time) or timeouts (duration). Functions should check `ctx.Done()` and return early when cancelled. Essential for robust concurrent applications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/deployment--tooling@deploy-optimize.md b/src/data/roadmaps/golang/content/deployment--tooling@deploy-optimize.md
new file mode 100644
index 000000000..317d77a60
--- /dev/null
+++ b/src/data/roadmaps/golang/content/deployment--tooling@deploy-optimize.md
@@ -0,0 +1,3 @@
+# Deployment & Tooling
+
+Go deployment focuses on building optimized binaries for production. Static compilation creates self-contained executables, while cross-compilation builds for multiple platforms. Key aspects include containerization, configuration management, monitoring, and binary optimization for efficient production deployments.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/echo@1qhqEYf6wYf5sfXgTUnmi.md b/src/data/roadmaps/golang/content/echo@1qhqEYf6wYf5sfXgTUnmi.md
new file mode 100644
index 000000000..d02dc9144
--- /dev/null
+++ b/src/data/roadmaps/golang/content/echo@1qhqEYf6wYf5sfXgTUnmi.md
@@ -0,0 +1,3 @@
+# echo
+
+High-performance, minimalist web framework focusing on ease and speed. Provides routing, middleware, data binding, validation, rendering. Features automatic TLS, HTTP/2, WebSocket support. Built-in middleware for CORS, JWT, logging, compression. Popular for RESTful APIs and microservices.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/embedding-interfaces@wK7GNTbOsMNs0N_1N4-dU.md b/src/data/roadmaps/golang/content/embedding-interfaces@wK7GNTbOsMNs0N_1N4-dU.md
new file mode 100644
index 000000000..4e13b01b3
--- /dev/null
+++ b/src/data/roadmaps/golang/content/embedding-interfaces@wK7GNTbOsMNs0N_1N4-dU.md
@@ -0,0 +1,3 @@
+# Embedding Interfaces
+
+Create new interfaces by combining existing ones, promoting composition and reusability. Embedded interface methods automatically included. Enables interface hierarchies from simpler, focused interfaces. Supports composition over inheritance for modular, extensible systems.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/embedding-structs@XLj16RmCe4-nKHW52Ebhf.md b/src/data/roadmaps/golang/content/embedding-structs@XLj16RmCe4-nKHW52Ebhf.md
new file mode 100644
index 000000000..efb27e38d
--- /dev/null
+++ b/src/data/roadmaps/golang/content/embedding-structs@XLj16RmCe4-nKHW52Ebhf.md
@@ -0,0 +1,3 @@
+# Embedding Structs
+
+Struct embedding includes one struct inside another without field names, making embedded fields directly accessible. Provides composition-based design following Go's philosophy of composition over inheritance. Enables flexible, reusable components.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/empty-interfaces@ueJ7ndK2SKniDVjN2aUlO.md b/src/data/roadmaps/golang/content/empty-interfaces@ueJ7ndK2SKniDVjN2aUlO.md
new file mode 100644
index 000000000..4b730be82
--- /dev/null
+++ b/src/data/roadmaps/golang/content/empty-interfaces@ueJ7ndK2SKniDVjN2aUlO.md
@@ -0,0 +1,3 @@
+# Empty Interface
+
+The empty interface `interface{}` can hold values of any type since every type implements at least zero methods. Used for generic programming before Go 1.18 generics. Requires type assertions or type switches to access underlying values. Common in APIs handling unknown data types.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/encodingjson@uB1fE15OprBcwN7p7ffJF.md b/src/data/roadmaps/golang/content/encodingjson@uB1fE15OprBcwN7p7ffJF.md
new file mode 100644
index 000000000..d8e891211
--- /dev/null
+++ b/src/data/roadmaps/golang/content/encodingjson@uB1fE15OprBcwN7p7ffJF.md
@@ -0,0 +1 @@
+# encoding/json
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/error-handling-basics@7EKUfKx7_7lZOs3d84iyL.md b/src/data/roadmaps/golang/content/error-handling-basics@7EKUfKx7_7lZOs3d84iyL.md
new file mode 100644
index 000000000..0f865b56f
--- /dev/null
+++ b/src/data/roadmaps/golang/content/error-handling-basics@7EKUfKx7_7lZOs3d84iyL.md
@@ -0,0 +1,3 @@
+# Error Handling Basics
+
+Go uses explicit error handling with error return values. Functions return error as last value. Check `if err != nil` pattern. Create errors with `errors.New()` or `fmt.Errorf()`. No exceptions - errors are values to be handled explicitly.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/error-interface@0mMP6QR0V-Zi25njD1TFT.md b/src/data/roadmaps/golang/content/error-interface@0mMP6QR0V-Zi25njD1TFT.md
new file mode 100644
index 000000000..6749506b2
--- /dev/null
+++ b/src/data/roadmaps/golang/content/error-interface@0mMP6QR0V-Zi25njD1TFT.md
@@ -0,0 +1,3 @@
+# `error` interface
+
+Built-in interface with single `Error() string` method. Any type implementing this method can represent an error. Central to Go's error handling philosophy, providing consistent error representation across all Go code. Fundamental for effective error handling.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/errorsnew@dHk6Y0zFqxtCuDiQcHQsi.md b/src/data/roadmaps/golang/content/errorsnew@dHk6Y0zFqxtCuDiQcHQsi.md
new file mode 100644
index 000000000..d83dd51e7
--- /dev/null
+++ b/src/data/roadmaps/golang/content/errorsnew@dHk6Y0zFqxtCuDiQcHQsi.md
@@ -0,0 +1,3 @@
+# errors.New
+
+Simplest way to create error values by taking a string message and returning an error implementing the error interface. Useful for simple, static error messages. Often combined with error wrapping or used for predefined error constants.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/escape-analysis@ixoXVtRlrvTittqQq-Bgo.md b/src/data/roadmaps/golang/content/escape-analysis@ixoXVtRlrvTittqQq-Bgo.md
new file mode 100644
index 000000000..17ad9ba26
--- /dev/null
+++ b/src/data/roadmaps/golang/content/escape-analysis@ixoXVtRlrvTittqQq-Bgo.md
@@ -0,0 +1,3 @@
+# Escape Analysis
+
+Compile-time optimization determining whether variables are allocated on stack (fast) or heap (GC required). Variables that "escape" their scope need heap allocation. Use `go build -gcflags="-m"` to view decisions. Understanding helps minimize heap allocations and reduce GC pressure.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/fan-in@8BrnnM7HM-bijbUDgnW49.md b/src/data/roadmaps/golang/content/fan-in@8BrnnM7HM-bijbUDgnW49.md
new file mode 100644
index 000000000..87df37dd9
--- /dev/null
+++ b/src/data/roadmaps/golang/content/fan-in@8BrnnM7HM-bijbUDgnW49.md
@@ -0,0 +1,3 @@
+# Fan-in
+
+Concurrency pattern merging multiple input channels into single output channel. Allows collecting results from multiple goroutines. Typically implemented with select statement or separate goroutines for each input. Useful for aggregating parallel processing results.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/fan-out@pN8EsuKUPDUKyskodu_sC.md b/src/data/roadmaps/golang/content/fan-out@pN8EsuKUPDUKyskodu_sC.md
new file mode 100644
index 000000000..8a7c178f7
--- /dev/null
+++ b/src/data/roadmaps/golang/content/fan-out@pN8EsuKUPDUKyskodu_sC.md
@@ -0,0 +1,3 @@
+# Fan-out
+
+Concurrency pattern distributing work from single source to multiple workers. Typically uses one input channel feeding multiple goroutines. Each worker processes items independently. Useful for parallelizing CPU-intensive tasks and increasing throughput through parallel processing.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/fiber@5lJPsJwgy0_T7Xl6eQxuB.md b/src/data/roadmaps/golang/content/fiber@5lJPsJwgy0_T7Xl6eQxuB.md
new file mode 100644
index 000000000..3bebed596
--- /dev/null
+++ b/src/data/roadmaps/golang/content/fiber@5lJPsJwgy0_T7Xl6eQxuB.md
@@ -0,0 +1,3 @@
+# fiber
+
+Fiber is an Express-inspired web framework built on fasthttp for exceptional performance. Provides familiar API with middleware, routing, templates, and WebSocket support. Popular for high-performance REST APIs and microservices requiring speed and simplicity.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/flag@-8E79Ns4q-uAgcxtghPzf.md b/src/data/roadmaps/golang/content/flag@-8E79Ns4q-uAgcxtghPzf.md
new file mode 100644
index 000000000..db199d6c5
--- /dev/null
+++ b/src/data/roadmaps/golang/content/flag@-8E79Ns4q-uAgcxtghPzf.md
@@ -0,0 +1,3 @@
+# flag
+
+Standard library package for parsing command-line flags. Supports string, int, bool, duration flags with default values and descriptions. Automatically generates help text. Simple API for basic CLI argument parsing before using frameworks like Cobra.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/floating-points@EzaH378F3kOdQbczhVjhA.md b/src/data/roadmaps/golang/content/floating-points@EzaH378F3kOdQbczhVjhA.md
new file mode 100644
index 000000000..e97df6a2d
--- /dev/null
+++ b/src/data/roadmaps/golang/content/floating-points@EzaH378F3kOdQbczhVjhA.md
@@ -0,0 +1,3 @@
+# Floating Points
+
+Two types: `float32` (single precision) and `float64` (double precision, default). Represent real numbers using IEEE 754 standard. Can introduce precision errors, not suitable for exact financial calculations. Essential for scientific computing and graphics.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/fmterrorf@LVaWjZfij6-z_uwkAc0MK.md b/src/data/roadmaps/golang/content/fmterrorf@LVaWjZfij6-z_uwkAc0MK.md
new file mode 100644
index 000000000..6196ea8ae
--- /dev/null
+++ b/src/data/roadmaps/golang/content/fmterrorf@LVaWjZfij6-z_uwkAc0MK.md
@@ -0,0 +1,3 @@
+# fmt.Errorf
+
+Creates formatted error messages using printf-style verbs. Supports `%w` verb for error wrapping (Go 1.13+) to create error chains preserving original errors while adding context. Essential for descriptive errors with dynamic values and debugging information.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/for-loop@ijS-b400c9BldRO6PlrC1.md b/src/data/roadmaps/golang/content/for-loop@ijS-b400c9BldRO6PlrC1.md
new file mode 100644
index 000000000..86b7bb4f3
--- /dev/null
+++ b/src/data/roadmaps/golang/content/for-loop@ijS-b400c9BldRO6PlrC1.md
@@ -0,0 +1,3 @@
+# for loop
+
+Go's only looping construct, incredibly flexible for all iteration needs. Classic form: initialization, condition, post statements. Omit components for different behaviors (infinite, while-like). Use with `break`, `continue`, labels for nested loops. `for range` for convenient collection iteration.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/for-range@j0w6e8Pksh30PKDvXj3yk.md b/src/data/roadmaps/golang/content/for-range@j0w6e8Pksh30PKDvXj3yk.md
new file mode 100644
index 000000000..7068b5839
--- /dev/null
+++ b/src/data/roadmaps/golang/content/for-range@j0w6e8Pksh30PKDvXj3yk.md
@@ -0,0 +1,3 @@
+# for-range
+
+Special form of for loop for iterating over arrays, slices, maps, strings, and channels. Returns index/key and value. For strings, returns rune index and rune value. For channels, returns only values. Use blank identifier `_` to ignore unwanted return values.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/functions-basics@MBafBhpEV_7qgDNPOIBBs.md b/src/data/roadmaps/golang/content/functions-basics@MBafBhpEV_7qgDNPOIBBs.md
new file mode 100644
index 000000000..458062594
--- /dev/null
+++ b/src/data/roadmaps/golang/content/functions-basics@MBafBhpEV_7qgDNPOIBBs.md
@@ -0,0 +1,3 @@
+# Function Basics
+
+Reusable code blocks declared with `func` keyword. Support parameters, return values, multiple returns. First-class citizens - can be assigned to variables, passed as arguments. Fundamental building blocks for organizing code logic.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/functions@axhcEfCEoFkLey4AbA84A.md b/src/data/roadmaps/golang/content/functions@axhcEfCEoFkLey4AbA84A.md
new file mode 100644
index 000000000..051c5bbd2
--- /dev/null
+++ b/src/data/roadmaps/golang/content/functions@axhcEfCEoFkLey4AbA84A.md
@@ -0,0 +1,3 @@
+# Functions
+
+First-class citizens in Go. Declared with `func` keyword, support parameters and return values. Can be assigned to variables, passed as arguments, returned from other functions. Support multiple return values, named returns, and variadic parameters. Building blocks of modular code.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/garbage-collection@GG0j6MNVudvITHEOXUxim.md b/src/data/roadmaps/golang/content/garbage-collection@GG0j6MNVudvITHEOXUxim.md
new file mode 100644
index 000000000..b1a1ee684
--- /dev/null
+++ b/src/data/roadmaps/golang/content/garbage-collection@GG0j6MNVudvITHEOXUxim.md
@@ -0,0 +1,3 @@
+# Garbage Collection
+
+Go's GC automatically reclaims unreachable memory using concurrent, tri-color mark-and-sweep collector designed for minimal pause times. Runs concurrently with your program. Understanding GC helps write efficient programs that work well with automatic memory management.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/generic-functions@p7L4EUsjMnJlrbb-oDvlf.md b/src/data/roadmaps/golang/content/generic-functions@p7L4EUsjMnJlrbb-oDvlf.md
new file mode 100644
index 000000000..a24ba5b85
--- /dev/null
+++ b/src/data/roadmaps/golang/content/generic-functions@p7L4EUsjMnJlrbb-oDvlf.md
@@ -0,0 +1,3 @@
+# Generic Functions
+
+Write functions working with multiple types using type parameters in square brackets like `func FunctionName[T any](param T) T`. Enable reusable algorithms maintaining type safety. Particularly useful for utility functions and data processing that don't depend on specific types.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/generic-types--interfaces@eWZzradMaH57H4mI7Qw6n.md b/src/data/roadmaps/golang/content/generic-types--interfaces@eWZzradMaH57H4mI7Qw6n.md
new file mode 100644
index 000000000..7f43c999d
--- /dev/null
+++ b/src/data/roadmaps/golang/content/generic-types--interfaces@eWZzradMaH57H4mI7Qw6n.md
@@ -0,0 +1,3 @@
+# Generic Types / Interfaces
+
+Create reusable data structures and interface definitions working with multiple types. Define with type parameters like `type Container[T any] struct { value T }`. Enable type-safe containers, generic slices, maps, and custom structures while maintaining Go's strong typing.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/generics@uEpTANOBHlFwCg5p44Lh0.md b/src/data/roadmaps/golang/content/generics@uEpTANOBHlFwCg5p44Lh0.md
new file mode 100644
index 000000000..fede7199e
--- /dev/null
+++ b/src/data/roadmaps/golang/content/generics@uEpTANOBHlFwCg5p44Lh0.md
@@ -0,0 +1,3 @@
+# Generics
+
+Introduced in Go 1.18, allow functions and types to work with different data types while maintaining type safety. Enable reusable code without sacrificing performance. Use type parameters (square brackets) and constraints. Reduce code duplication while preserving strong typing.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/gin@xM1uUCXNrJwfTgi9E75KV.md b/src/data/roadmaps/golang/content/gin@xM1uUCXNrJwfTgi9E75KV.md
new file mode 100644
index 000000000..c500ae91a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/gin@xM1uUCXNrJwfTgi9E75KV.md
@@ -0,0 +1,3 @@
+# gin
+
+Popular HTTP web framework emphasizing performance and productivity. Lightweight foundation for APIs/web services with minimal boilerplate. Fast routing, middleware, JSON validation, error management, built-in rendering. Clean API for RESTful services. Includes parameter binding, uploads, static files.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-advanced/buffer.md b/src/data/roadmaps/golang/content/go-advanced/buffer.md
deleted file mode 100644
index 3e454a7ec..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/buffer.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Buffer
-
-The `buffer` belongs to the byte package of the Go language, and we can use these package to manipulate the byte of the string.
-
-Visit the following resources to learn more:
-
-- [@official@Buffer Examples](https://pkg.go.dev/bytes#example-Buffer)
-- [@article@Buffer](https://www.educba.com/golang-buffer/)
diff --git a/src/data/roadmaps/golang/content/go-advanced/channels.md b/src/data/roadmaps/golang/content/go-advanced/channels.md
deleted file mode 100644
index 9c47b655c..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/channels.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Channels
-
-Channels are the pipes that connect concurrent goroutines. You can send values into channels from one goroutine and receive those values into another goroutine.
-
-Channels are a typed conduit through which you can send and receive values with the channel operator, `<-` .
-
-Visit the following resources to learn more:
-
-- [@official@Channels](https://go.dev/tour/concurrency/2)
-- [@official@Effective Go: Channels](https://go.dev/doc/effective_go#channels)
-- [@article@Go by Example: Channels](https://gobyexample.com/channels)
-- [@article@Channels in Golang](https://golangbot.com/channels/)
-- [@video@Channels](https://www.youtube.com/watch?v=e4bu9g-bYtg)
-- [@video@Golang Channel Basics You must Know!](https://youtu.be/LgCmPHqAuf4)
diff --git a/src/data/roadmaps/golang/content/go-advanced/context.md b/src/data/roadmaps/golang/content/go-advanced/context.md
deleted file mode 100644
index affcb3b85..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/context.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Context
-
-The `context` package provides a standard way to solve the problem of managing the state during a request. The package satisfies the need for request-scoped data and provides a standardized way to handle: Deadlines, Cancellation Signals, etc.
-
-Visit the following resources to learn more:
-
-- [@official@Go Context](https://pkg.go.dev/context)
-- [@article@Go by Example: Context](https://gobyexample.com/context)
-- [@article@Digital Ocean: How to Use Contexts in Go](https://www.digitalocean.com/community/tutorials/how-to-use-contexts-in-go)
-- [@video@Context in Go](https://www.youtube.com/watch?v=LSzR0VEraWw)
-- [@video@Understanding Contexts in Go](https://youtu.be/h2RdcrMLQAo)
diff --git a/src/data/roadmaps/golang/content/go-advanced/generics.md b/src/data/roadmaps/golang/content/go-advanced/generics.md
deleted file mode 100644
index 96e832b21..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/generics.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Go Generics
-
-Go Generics is a feature that allows you to write functions, data structures, and algorithms that can work with any type. This is a powerful feature that can help you write more flexible and reusable code.
-
-Visit the following resources to learn more:
-
-- [@official@Generics](https://go.dev/doc/tutorial/generics)
-- [@official@Go Blog: Generics](https://go.dev/blog/intro-generics)
-- [@article@Go by Example: Generics](https://gobyexample.com/generics)
-- [@video@Generics Explained](https://www.youtube.com/watch?v=WpTKqnfp5dY)
diff --git a/src/data/roadmaps/golang/content/go-advanced/go-modules.md b/src/data/roadmaps/golang/content/go-advanced/go-modules.md
deleted file mode 100644
index 5077af41f..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/go-modules.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Modules
-
-Go modules are a group of related packages that are versioned and distributed together. They specify the requirements of our project, list all the required dependencies, and help us keep track of the specific versions of installed dependencies.
-
-Visit the following resources to learn more:
-
-- [@official@Go Modules](https://go.dev/blog/using-go-modules)
-- [@article@DigitalOcean: How to use Go Modules](https://www.digitalocean.com/community/tutorials/how-to-use-go-modules)
-- [@video@Go Modules](https://www.youtube.com/watch?v=9cV1KESTJRc)
-- [@feed@Explore top posts about Golang](https://app.daily.dev/tags/golang?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-advanced/goroutines.md b/src/data/roadmaps/golang/content/go-advanced/goroutines.md
deleted file mode 100644
index 8f35248df..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/goroutines.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Goroutines
-
-Goroutines allow us to write concurrent programs in Go. Things like web servers handling thousands of requests or a website rendering new pages while also concurrently making network requests are a few example of concurrency. In Go, each of these concurrent tasks are called `Goroutines`.
-
-Visit the following resources to learn more:
-
-- [@official@Goroutines](https://go.dev/tour/concurrency/1)
-- [@official@Effective Go: Goroutines](https://go.dev/doc/effective_go#goroutines)
-- [@video@GoRoutines](https://www.youtube.com/watch?v=LvgVSSpwND8)
-- [@video@Understanding Concurrency](https://www.youtube.com/watch?v=V-0ifUKCkBI)
-- [@article@Go by Example: Goroutines](https://gobyexample.com/goroutines)
-- [@feed@Explore top posts about Golang](https://app.daily.dev/tags/golang?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-advanced/index.md b/src/data/roadmaps/golang/content/go-advanced/index.md
deleted file mode 100644
index 1e06f64d1..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/index.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Go advanced
-
-Diving deeper into Golang involves exploring the language's more advanced features and best practices to harness its full potential. Once you’ve mastered the basics, advancing your knowledge includes understanding complex aspects of Go that can significantly improve your code’s performance, readability, and maintainability.
-
-Visit the following resources to learn more:
-
-- [@article@Mastering Advance GO](https://www.reddit.com/r/golang/comments/m57vwe/advanced_go_techniques_you_think_everyone_should/)
diff --git a/src/data/roadmaps/golang/content/go-advanced/interfaces.md b/src/data/roadmaps/golang/content/go-advanced/interfaces.md
deleted file mode 100644
index fb0ae34db..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/interfaces.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Interfaces
-
-An interface in Go, is a type that defines a set of methods. If we have a type (e.g. struct) that implements that set of methods, then we have a type that implements this interface.
-
-Visit the following resources to learn more:
-
-- [@official@Go Interfaces](https://go.dev/tour/methods/9)
-- [@official@Effective Go: Interfaces](https://go.dev/doc/effective_go#interfaces)
-- [@article@Go by Example: Interfaces](https://gobyexample.com/interfaces)
-- [@video@Golang Tutorial #22 - Interfaces (by Tech With Tim on YouTube)](https://www.youtube.com/watch?v=lh_Uv2imp14)
-- [@video@Understanding Go Interfaces](https://www.youtube.com/watch?v=qJKQZKGZgf0)
diff --git a/src/data/roadmaps/golang/content/go-advanced/mutex.md b/src/data/roadmaps/golang/content/go-advanced/mutex.md
deleted file mode 100644
index cf667fb29..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/mutex.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Mutex
-
-Go allows us to run code concurrently using goroutines. However, when concurrent processes access the same piece of data, it can lead to race conditions. Mutexes are data structures provided by the sync package. They can help us place a lock on different sections of data so that only one goroutine can access it at a time.
-
-Visit the following resources to learn more:
-
-- [@article@Using a Mutex in Go with Examples](https://www.sohamkamani.com/golang/mutex/)
-- [@article@Sync Package](https://pkg.go.dev/sync/)
diff --git a/src/data/roadmaps/golang/content/go-advanced/pointers.md b/src/data/roadmaps/golang/content/go-advanced/pointers.md
deleted file mode 100644
index 574f162e1..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/pointers.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Go Pointers
-
-Go pointers are a powerful feature that allows you to work with memory addresses directly. They are used to store the memory address of a variable. This can be useful when you need to pass a large amount of data to a function or when you need to modify the value of a variable inside a function.
-
-Visit the following resources to learn more:
-
-- [@official@Pointers](https://go.dev/tour/moretypes/1)
-- [@article@Go by Example: Pointers](https://gobyexample.com/pointers)
-- [@video@YouTube: Pointers](https://www.youtube.com/watch?v=a4HcEsJ1hIE)
diff --git a/src/data/roadmaps/golang/content/go-advanced/scheduler.md b/src/data/roadmaps/golang/content/go-advanced/scheduler.md
deleted file mode 100644
index c2df3eb9f..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/scheduler.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Go Scheduler
-
-Go Scheduler allows us to understand more deeply about how Golang works internally. In terms of logical processors, cores, threads, pool cache, context switching etc. The Go scheduler is part of the Go runtime, and the Go runtime is built into your application.
-
-Visit the following resources to learn more:
-
-- [@article@OS Scheduler - 1](https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part1.html)
-- [@article@Go Scheduler - 2](https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part2.html)
-- [@article@Illustrated Tales of Go Runtime Scheduler](https://medium.com/@ankur_anand/illustrated-tales-of-go-runtime-scheduler-74809ef6d19b)
-- [@video@Go scheduler: Implementing language with lightweight concurrency](https://www.youtube.com/watch?v=-K11rY57K7k&ab_channel=Hydra)
diff --git a/src/data/roadmaps/golang/content/go-advanced/select.md b/src/data/roadmaps/golang/content/go-advanced/select.md
deleted file mode 100644
index 4edd1c0ae..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/select.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Select
-
-The `select` statement lets a goroutine wait on multiple communication operations.
-
-A `select` blocks until one of its cases can run, then it executes that case. It chooses one at random if multiple are ready. The `select` statement is just like switch statement, but in the select statement, case statement refers to communication, i.e. sent or receive operation on the channel.
-
-Visit the following resources to learn more:
-
-- [@official@Select](https://go.dev/tour/concurrency/5)
-- [@article@Go by Example: Select](https://gobyexample.com/select)
-- [@video@Select Statement](https://www.youtube.com/watch?v=1c7ttSJDMAI)
diff --git a/src/data/roadmaps/golang/content/go-advanced/types-and-type-assertions.md b/src/data/roadmaps/golang/content/go-advanced/types-and-type-assertions.md
deleted file mode 100644
index 2a0adb084..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/types-and-type-assertions.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Types and type assertions
-
-Types in Golang specify the data type that a valid Go variable can hold. Golang has four categories of Types including Basic, Aggregate, Reference, and Interface Types. Type assertions in Golang provide access to the exact type of variable of an interface.
-
-Visit the following resources to learn more:
-
-- [@official@Types Assertions](https://go.dev/tour/methods/15)
-- [@video@Go Syntax - Type Assertions](https://youtube.com/watch?v=vtGbi9bGr3s)
diff --git a/src/data/roadmaps/golang/content/go-advanced/working-with-json.md b/src/data/roadmaps/golang/content/go-advanced/working-with-json.md
deleted file mode 100644
index 34be94780..000000000
--- a/src/data/roadmaps/golang/content/go-advanced/working-with-json.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Working with json
-
-JSON (JavaScript Object Notation) is a simple data interchange format. Syntactically it resembles the objects and lists of JavaScript. It is most commonly used for communication between web back-ends and JavaScript programs running in the browser, but it is used in many other places, too.
-
-Visit the following resources to learn more:
-
-- [@official@JSON](https://go.dev/blog/json)
-- [@article@Guide to JSON in Golang](https://www.sohamkamani.com/golang/json/)
-- [@article@JSON to GO](https://mholt.github.io/json-to-go/)
-- [@article@Comprehensive Guide to using JSON in Go](https://betterstack.com/community/guides/scaling-go/json-in-go/)
diff --git a/src/data/roadmaps/golang/content/go-api-clients/graphql/gqlgen.md b/src/data/roadmaps/golang/content/go-api-clients/graphql/gqlgen.md
deleted file mode 100644
index 8358f3e18..000000000
--- a/src/data/roadmaps/golang/content/go-api-clients/graphql/gqlgen.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Gqlgen
-
-According to their documentation, it's a Golang library for building GraphQL servers without much effort.
-
-Visit the following resources to learn more:
-
-- [@official@Gqlgen Documentation](https://gqlgen.com/)
-- [@article@Introducing gqlgen: a GraphQL Server Generator for Go](https://99designs.com.au/blog/engineering/gqlgen-a-graphql-server-generator-for-go/)
-- [@video@GraphQL in Go - GQLGen Tutorial (by acklackl on YouTube)](https://www.youtube.com/watch?v=O6jYy421tGw)
diff --git a/src/data/roadmaps/golang/content/go-api-clients/graphql/graphql-go.md b/src/data/roadmaps/golang/content/go-api-clients/graphql/graphql-go.md
deleted file mode 100644
index 3ccfdac08..000000000
--- a/src/data/roadmaps/golang/content/go-api-clients/graphql/graphql-go.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Graphql go
-
-A `GraphQL` package for `Go`.
-
-Visit the following resources to learn more:
-
-- [@article@Graphql-go homepage](https://graphql-go.github.io/graphql-go.org/)
-- [@article@Graphql-go documentation](https://pkg.go.dev/github.com/graphql-go/graphql)
-- [@opensource@Graphql](https://github.com/graphql-go/graphql)
-- [@video@GraphQL-Go - Golang Tutorial (by TechPractice on YouTube)](https://www.youtube.com/watch?v=YK7BQfQ84ws)
-- [@feed@Explore top posts about GraphQL](https://app.daily.dev/tags/graphql?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-api-clients/graphql/index.md b/src/data/roadmaps/golang/content/go-api-clients/graphql/index.md
deleted file mode 100644
index 1b249b19a..000000000
--- a/src/data/roadmaps/golang/content/go-api-clients/graphql/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Graphql
-
-`GraphQL` is a query language for APIs, it offers a service that prioritizes giving just the data that the client requested and no more. Besides, you don't need to be worried about breaking changes, versioning and backwards compatibility like REST APIs. Therefore you can implement your version and auto-document your API just by using `GraphQL`.
-
-Visit the following resources to learn more:
-
-- [@roadmap@Visit Dedicated GraphQL Roadmap](https://roadmap.sh/graphql)
-- [@official@Learn GraphQL](https://graphql.org/learn/)
-- [@official@GraphQL Tutorials](https://www.graphql.com/tutorials/)
-- [@article@Red Hat: What is GraphQL?](https://www.redhat.com/en/topics/api/what-is-graphql)
-- [@article@Digital Ocean: An Introduction to GraphQL](https://www.digitalocean.com/community/tutorials/an-introduction-to-graphql)
-- [@video@GraphQL Full Course - Novice to Expert](https://www.youtube.com/watch?v=ed8SzALpx1Q)
-- [@video@Beginner GraphQL Series (by Ben Awad on YouTube)](https://www.youtube.com/playlist?list=PLN3n1USn4xln0j_NN9k4j5hS1thsGibKi)
-- [@feed@Explore top posts about GraphQL](https://app.daily.dev/tags/graphql?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-api-clients/index.md b/src/data/roadmaps/golang/content/go-api-clients/index.md
deleted file mode 100644
index 291c31ff6..000000000
--- a/src/data/roadmaps/golang/content/go-api-clients/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# API Clients
-
-An API client is a set of tools and protocols that operate from an application on a computer. They help you to bypass some operations when developing a web application rather than reinventing the wheel every time. Using a client API is a great way to speed up the development process.
-
-Visit the following resources to learn more:
-
-- [@article@API Clients](https://rapidapi.com/blog/api-glossary/client/)
-- [@feed@Explore top posts about Golang](https://app.daily.dev/tags/golang?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-api-clients/rest/grequests.md b/src/data/roadmaps/golang/content/go-api-clients/rest/grequests.md
deleted file mode 100644
index 115b52da9..000000000
--- a/src/data/roadmaps/golang/content/go-api-clients/rest/grequests.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Grequests
-
-Golang implementation of Python Grequests library(one of well known HTTP Library in Python).
-
-Features:
-
-- Responses can be serialized into JSON and XML
-- Easy file uploads
-- Easy file downloads
-- Support for the following HTTP verbs GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS
-
-Visit the following resources to learn more:
-
-- [@opensource@Grequests](https://github.com/levigross/grequests)
diff --git a/src/data/roadmaps/golang/content/go-api-clients/rest/heimdall.md b/src/data/roadmaps/golang/content/go-api-clients/rest/heimdall.md
deleted file mode 100644
index 831a56405..000000000
--- a/src/data/roadmaps/golang/content/go-api-clients/rest/heimdall.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Heimdall
-
-Heimdall is an HTTP client that helps your application make a large number of requests, at scale. With Heimdall, you can:
-
-- Use a hystrix-like circuit breaker to control failing requests
-- Add synchronous in-memory retries to each request, with the option of setting your own retrier strategy
-- Create clients with different timeouts for every request
-
-All HTTP methods are exposed as a fluent interface.
-
-Visit the following resources to learn more:
-
-- [@opensource@Heimdall](https://github.com/gojek/heimdall)
diff --git a/src/data/roadmaps/golang/content/go-api-clients/rest/index.md b/src/data/roadmaps/golang/content/go-api-clients/rest/index.md
deleted file mode 100644
index 87bd467fd..000000000
--- a/src/data/roadmaps/golang/content/go-api-clients/rest/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# REST
-
-REST (Representational State Transfer) API (Application Programming Interface) is used to deliver user functionality when dealing with websites. HTTP requests are used to communicate with REST APIs so users can navigate a URL website. These URLs can return certain information that is stored as part of the API.
-
-Visit the following resources to learn more:
-
-- [@official@Tutorial](https://go.dev/doc/tutorial/web-service-gin)
-- [@video@RESTful APIs Series](https://youtube.com/playlist?list=PLzUGFf4GhXBL4GHXVcMMvzgtO8-WEJIoY)
-- [@feed@Explore top posts about REST API](https://app.daily.dev/tags/rest-api?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-basics/arrays.md b/src/data/roadmaps/golang/content/go-basics/arrays.md
deleted file mode 100644
index 5fd739e2d..000000000
--- a/src/data/roadmaps/golang/content/go-basics/arrays.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Arrays
-
-In Go an `array` is a collection of elements of the same type with a **fixed** size defined when the array is created.
-
-Visit the following resources to learn more:
-
-- [@official@Go Arrays](https://go.dev/tour/moretypes/6)
-- [@official@Effective Go: Arrays](https://go.dev/doc/effective_go#arrays)
-- [@video@Learn Go Programming - Arrays](https://youtu.be/YS4e4q9oBaU?t=6473)
diff --git a/src/data/roadmaps/golang/content/go-basics/basic-syntax.md b/src/data/roadmaps/golang/content/go-basics/basic-syntax.md
deleted file mode 100644
index 9e23daaee..000000000
--- a/src/data/roadmaps/golang/content/go-basics/basic-syntax.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Basic Syntax
-
-Learn about the basic syntax of Go, such as how the Go programs are executed, package imports, main function, and so on.
-
-Visit the following resources to learn more:
-
-- [@official@Go Tutorial: Getting started](https://go.dev/doc/tutorial/getting-started)
-- [@article@Go by Example: Hello World](https://gobyexample.com/hello-world)
diff --git a/src/data/roadmaps/golang/content/go-basics/conditionals.md b/src/data/roadmaps/golang/content/go-basics/conditionals.md
deleted file mode 100644
index 97206f66c..000000000
--- a/src/data/roadmaps/golang/content/go-basics/conditionals.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Conditional Statements
-
-Conditional statements are used to run code only if a certain condition is true. Go supports:
-
-- `if` statements
-- `if...else` statements
-- `switch...case` statements
-
-Visit the following resources to learn more:
-
-- [@official@Effective Go: `if` statement](https://go.dev/doc/effective_go#if)
-- [@article@Go by Example: If-Else](https://gobyexample.com/if-else)
-- [@article@Golang If-Else Statements](https://www.golangprograms.com/golang-if-else-statements.html)
-- [@article@Golang Switch Case Programs](https://www.golangprograms.com/golang-switch-case-statements.html)
diff --git a/src/data/roadmaps/golang/content/go-basics/data-types.md b/src/data/roadmaps/golang/content/go-basics/data-types.md
deleted file mode 100644
index c51b63fa2..000000000
--- a/src/data/roadmaps/golang/content/go-basics/data-types.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Data Types
-
-Go is a statically typed programming language, which means each variable has a type defined at first and can only hold values with that type. There are two categories of types in Go: basics types and composite types.
-
-Visit the following resources to learn more:
-
-- [@official@Tour of Go: types](https://go.dev/tour/basics/11)
diff --git a/src/data/roadmaps/golang/content/go-basics/errors-panic-recover.md b/src/data/roadmaps/golang/content/go-basics/errors-panic-recover.md
deleted file mode 100644
index b4c8df5fb..000000000
--- a/src/data/roadmaps/golang/content/go-basics/errors-panic-recover.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Errors/Panic/Recover
-
-In lieu of adding exception handlers, the Go creators exploited Go’s ability to return multiple values. The most commonly used Go technique for issuing errors is to return the error as the last value in a return.
-
-A panic typically means something went unexpectedly wrong. Mostly used to fail fast on errors that shouldn’t occur during normal operation, or that we aren’t prepared to handle gracefully.
-
-Panic recovery in Go depends on a feature of the language called deferred functions. Go has the ability to guarantee the execution of a function at the moment its parent function returns. This happens regardless of whether the reason for the parent function’s return is a return statement, the end of the function block, or a panic.
-
-Visit the following resources to learn more:
-
-- [@official@Error handling and Go](https://go.dev/blog/error-handling-and-go)
-- [@official@Go Defer, Panic and Recover](https://go.dev/blog/defer-panic-and-recover)
-- [@article@Effective error handling in Go](https://earthly.dev/blog/golang-errors/)
diff --git a/src/data/roadmaps/golang/content/go-basics/for-loop.md b/src/data/roadmaps/golang/content/go-basics/for-loop.md
deleted file mode 100644
index 7886fa3c4..000000000
--- a/src/data/roadmaps/golang/content/go-basics/for-loop.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# For Loop
-
-Go has only one looping construct, the `for` loop. The basic `for` loop has three components separated by semicolons:
-
-- the init statement: executed before the first iteration
-- the condition expression: evaluated before every iteration
-- the post statement: executed at the end of every iteration
-
-Visit the following resources to learn more:
-
-- [@official@For Loop in Golang](https://go.dev/tour/flowcontrol/1)
-- [@official@Effective Go: For loop](https://go.dev/doc/effective_go#for)
-- [@article@Go by Example: For loop](https://gobyexample.com/for)
-- [@article@5 Basic for Loop Patterns](https://yourbasic.org/golang/for-loop/)
diff --git a/src/data/roadmaps/golang/content/go-basics/functions.md b/src/data/roadmaps/golang/content/go-basics/functions.md
deleted file mode 100644
index dfa9c37ae..000000000
--- a/src/data/roadmaps/golang/content/go-basics/functions.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Functions
-
-A function is a block of code that performs a specific task. It's a reusable unit of code that can be called from other parts of your program. Functions help you organize your code, make it more modular, and improve readability.
-
-Visit the following resources to learn more:
-
-- [@official@Effective Go: Functions](https://go.dev/doc/effective_go#functions)
-- [@article@Go by Example: Functions](https://gobyexample.com/functions)
-- [@article@Functions in Go](https://www.golangprograms.com/go-language/functions.html)
diff --git a/src/data/roadmaps/golang/content/go-basics/index.md b/src/data/roadmaps/golang/content/go-basics/index.md
deleted file mode 100644
index cc378fb00..000000000
--- a/src/data/roadmaps/golang/content/go-basics/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Learn the Basics
-
-Learn the common concepts of Go like variables, loops, conditional statements, functions, data types, and so on. A good starting point for go basics is its Go's official docs.
-
-Visit the following resources to learn more:
-
-- [@official@Go Tutorial](https://go.dev/doc/tutorial/)
-- [@article@Learn X in Y minutes](https://learnxinyminutes.com/go/)
-- [@feed@Explore top posts about Golang](https://app.daily.dev/tags/golang?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-basics/make.md b/src/data/roadmaps/golang/content/go-basics/make.md
deleted file mode 100644
index d039a62fc..000000000
--- a/src/data/roadmaps/golang/content/go-basics/make.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Make
-
-Golang's built-in function make, helps us create and initialize slices, maps and channels, depending on the arguments that are provided to the function.
-
-Visit the following resources to learn more:
-
-- [@official@Effective Go: Allocation with make](https://go.dev/doc/effective_go#allocation_make)
-- [@article@Create a slice with make](https://www.golangprograms.com/how-to-create-slice-using-make-function-in-golang.html)
-- [@article@Create a map with make](https://www.golangprograms.com/golang-package-examples/how-to-create-map-using-the-make-function-in-go.html)
-- [@article@Create a channel with make](https://www.programiz.com/golang/channel#channel)
diff --git a/src/data/roadmaps/golang/content/go-basics/maps.md b/src/data/roadmaps/golang/content/go-basics/maps.md
deleted file mode 100644
index 5dce09119..000000000
--- a/src/data/roadmaps/golang/content/go-basics/maps.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Maps
-
-Maps are the data structure in Go, where we use whenever we want to have mappings between key:value pairs. They have flexibility in terms of removing or adding elements into them. Maps do not allow duplicate entries while data are kept unordered.
-
-Visit the following resources to learn more:
-
-- [@official@Go Maps](https://go.dev/tour/moretypes/19)
-- [@official@Effective Go: Maps](https://go.dev/doc/effective_go#maps)
-- [@video@Golang Tutorial #15 - Maps (by Tech With Tim on YouTube)](https://www.youtube.com/watch?v=yJE2RC37BF4)
diff --git a/src/data/roadmaps/golang/content/go-basics/packages.md b/src/data/roadmaps/golang/content/go-basics/packages.md
deleted file mode 100644
index 7c4b18675..000000000
--- a/src/data/roadmaps/golang/content/go-basics/packages.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Packages
-
-Packages are the most powerful part of the Go language. The purpose of a package is to design and maintain a large number of programs by grouping related features together into single units so that they can be easy to maintain and understand and independent of the other package programs. This modularity allows them to share and reuse. In Go language, every package is defined with a different name and that name is close to their functionality like “strings” package and it contains methods and functions that only related to strings.
-
-Visit the following resources to learn more:
-
-- [@official@Go Packages Explorer](https://pkg.go.dev/)
-- [@official@Standard library](https://pkg.go.dev/std)
-- [@article@How to create a package in Go](https://www.golang-book.com/books/intro/11)
-- [@official@How to Manage External Dependencies in Go](https://go.dev/doc/modules/managing-dependencies)
diff --git a/src/data/roadmaps/golang/content/go-basics/range.md b/src/data/roadmaps/golang/content/go-basics/range.md
deleted file mode 100644
index 6d9ecc248..000000000
--- a/src/data/roadmaps/golang/content/go-basics/range.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Range
-
-`range` is used with for loops to iterate over each element in arrays, strings and other data structures.
-
-Visit the following resources to learn more:
-
-- [@official@Go Ranges](https://go.dev/tour/moretypes/16)
-- [@article@Go by Example: Range](https://gobyexample.com/range)
-- [@article@Go ranges basic patterns](https://yourbasic.org/golang/for-loop-range-array-slice-map-channel/)
diff --git a/src/data/roadmaps/golang/content/go-basics/slices.md b/src/data/roadmaps/golang/content/go-basics/slices.md
deleted file mode 100644
index 3b729665f..000000000
--- a/src/data/roadmaps/golang/content/go-basics/slices.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Slices
-
-Slices are similar to arrays but are more powerful and flexible. Like arrays, slices are also used to store multiple values of the same type in a single variable. However, unlike arrays, the length of a slice can grow and shrink as you see fit.
-
-Visit the following resources to learn more:
-
-- [@official@Go Slices](https://go.dev/tour/moretypes/7)
-- [@official@Effective Go: Slices](https://go.dev/doc/effective_go#slices)
-- [@video@Learn Go Programming - Slices](https://youtu.be/YS4e4q9oBaU?t=6473)
diff --git a/src/data/roadmaps/golang/content/go-basics/structs.md b/src/data/roadmaps/golang/content/go-basics/structs.md
deleted file mode 100644
index d7ebc030d..000000000
--- a/src/data/roadmaps/golang/content/go-basics/structs.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Structs
-
-Structs are user-defined types that help us create a collection of data describing a single entity.
-
-Visit the following resources to learn more:
-
-- [@official@Go Structs](https://go.dev/tour/moretypes/2)
-- [@article@Go by Example: Structs](https://gobyexample.com/structs)
-- [@video@Structs in Go](https://www.youtube.com/watch?v=NMTN543WVQY)
-- [@video@Struct tags and creating own tags through reflection](https://www.youtube.com/watch?v=vtHZb7gNlbw)
diff --git a/src/data/roadmaps/golang/content/go-basics/type-casting.md b/src/data/roadmaps/golang/content/go-basics/type-casting.md
deleted file mode 100644
index b57ba9b24..000000000
--- a/src/data/roadmaps/golang/content/go-basics/type-casting.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Type Casting
-
-Go doesn't support automatic type conversion, but it allows type casting, which is the process of explicitly changing the variable type.
-
-Visit the following resources to learn more:
-
-- [@official@Tour of Go: Type Casting Basics](https://go.dev/tour/basics/13)
-- [@article@Go Docs: Type Casting](https://golangdocs.com/type-casting-in-golang)
diff --git a/src/data/roadmaps/golang/content/go-basics/type-inference.md b/src/data/roadmaps/golang/content/go-basics/type-inference.md
deleted file mode 100644
index 3566d90a7..000000000
--- a/src/data/roadmaps/golang/content/go-basics/type-inference.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Type Inference
-
-Type inference gives go the capability to detect the type of a value without being explicitly indicated , hence the possibility to declare variables without providing its type at first
-
-Visit the following resources to learn more:
-
-- [@official@Tour of Go: Type Inference](https://go.dev/tour/basics/14)
-- [@article@Go Variables: Type Inference](https://www.callicoder.com/golang-variables-zero-values-type-inference/#type-inference)
diff --git a/src/data/roadmaps/golang/content/go-basics/variables.md b/src/data/roadmaps/golang/content/go-basics/variables.md
deleted file mode 100644
index db33dd67c..000000000
--- a/src/data/roadmaps/golang/content/go-basics/variables.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Variables in Go
-
-Variable is the name given to a memory location to store a value of a specific type. Go provides multiple ways to declare and use variables.
-
-Visit the following resources to learn more:
-
-- [@official@Go Variables](https://go.dev/tour/basics/8)
-- [@article@Go by Example: Variables](https://gobyexample.com/variables)
diff --git a/src/data/roadmaps/golang/content/go-build@LXqEJwGA_0cVUbF6DVwBG.md b/src/data/roadmaps/golang/content/go-build@LXqEJwGA_0cVUbF6DVwBG.md
new file mode 100644
index 000000000..e872ec76e
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-build@LXqEJwGA_0cVUbF6DVwBG.md
@@ -0,0 +1,3 @@
+# go build
+
+Compiles Go packages and dependencies into executable binaries. Supports cross-compilation for different OS/architectures via GOOS/GOARCH. Includes build constraints, custom flags, optimization levels. Produces statically linked binaries by default. Essential for deployment and distribution.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-building-clis/bubbletea.md b/src/data/roadmaps/golang/content/go-building-clis/bubbletea.md
deleted file mode 100644
index 80eb774fa..000000000
--- a/src/data/roadmaps/golang/content/go-building-clis/bubbletea.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Bubbletea
-
-Bubbletea is a powerful and flexible framework for building terminal user interfaces (TUIs) in Go, based on The Elm Architecture.
-
-Visit the following resources to learn more:
-
-- [@opensource@Bubbletea](https://github.com/charmbracelet/bubbletea)
-- [@article@Bubbletea Tutorial](https://github.com/charmbracelet/bubbletea/tree/master/tutorials)
-- [@video@Building Terminal Wizard in Go](https://www.youtube.com/watch?v=Gl31diSVP8M)
diff --git a/src/data/roadmaps/golang/content/go-building-clis/cobra.md b/src/data/roadmaps/golang/content/go-building-clis/cobra.md
deleted file mode 100644
index cd3fdda93..000000000
--- a/src/data/roadmaps/golang/content/go-building-clis/cobra.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Cobra
-
-Cobra is a library for creating powerful modern CLI applications.
-
-Visit the following resources to learn more:
-
-- [@opensource@Cobra Github](https://github.com/spf13/cobra)
-- [@official@Cobra Website](https://cobra.dev/)
-- [@article@Cobra Package Documentation](https://pkg.go.dev/github.com/spf13/cobra)
-- [@video@How to write beautiful Golang CLI](https://www.youtube.com/watch?v=SSRIn5DAmyw)
diff --git a/src/data/roadmaps/golang/content/go-building-clis/index.md b/src/data/roadmaps/golang/content/go-building-clis/index.md
deleted file mode 100644
index 4da6bb3dd..000000000
--- a/src/data/roadmaps/golang/content/go-building-clis/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Building CLI Applications
-
-Command line interfaces (CLIs), unlike graphical user interfaces (GUIs), are text-only. Cloud and infrastructure applications are primarily CLI-based due to their easy automation and remote capabilities.
-
-Go applications are built into a single self contained binary making installing Go applications trivial; specifically, programs written in Go run on any system without requiring any existing libraries, runtimes, or dependencies. And programs written in Go have an immediate startup time—similar to C or C++ but unobtainable with other programming languages.
-
-Visit the following resources to learn more:
-
-- [@official@Command-line Interfaces (CLIs)](https://go.dev/solutions/clis)
-- [@feed@Explore top posts about Golang](https://app.daily.dev/tags/golang?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-building-clis/urfave-cli.md b/src/data/roadmaps/golang/content/go-building-clis/urfave-cli.md
deleted file mode 100644
index 1363cf8e7..000000000
--- a/src/data/roadmaps/golang/content/go-building-clis/urfave-cli.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Urfave CLI
-
-Urfave CLI is a simple, fast, and fun package for building command line apps in Go.
-
-Visit the following resources to learn more:
-
-- [@opensource@Urfave CLI](https://github.com/urfave/cli)
-- [@article@Urfave Website](https://cli.urfave.org/)
-- [@article@How to Build cli in Go](https://blog.hackajob.co/how-to-build-cli-in-go/)
-- [@article@Building CLI using urfave cli](https://zerokspot.com/weblog/2021/01/25/building-a-cli-using-urfave-cli/)
-- [@feed@Explore top posts about CLI](https://app.daily.dev/tags/cli?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-clean@bxXzXM0zUm1vux1DKOLyf.md b/src/data/roadmaps/golang/content/go-clean@bxXzXM0zUm1vux1DKOLyf.md
new file mode 100644
index 000000000..2d77e5d03
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-clean@bxXzXM0zUm1vux1DKOLyf.md
@@ -0,0 +1,3 @@
+# go clean
+
+Removes object files and cached files from build process. Options include `-cache` for build cache and `-modcache` for module downloads. Useful for troubleshooting build issues, freeing disk space, and ensuring clean builds.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-command@_3_tFOpQisx6DSP4Yc2E2.md b/src/data/roadmaps/golang/content/go-command@_3_tFOpQisx6DSP4Yc2E2.md
new file mode 100644
index 000000000..e269916c4
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-command@_3_tFOpQisx6DSP4Yc2E2.md
@@ -0,0 +1,3 @@
+# `go` command
+
+Primary tool for managing Go source code with unified interface for compiling, testing, formatting, and managing dependencies. Includes subcommands like `build`, `run`, `test`, `fmt`, `mod`. Handles the entire development workflow automatically.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-doc@SoD0P5k4aSVRN96XxR5on.md b/src/data/roadmaps/golang/content/go-doc@SoD0P5k4aSVRN96XxR5on.md
new file mode 100644
index 000000000..11b9c2a4c
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-doc@SoD0P5k4aSVRN96XxR5on.md
@@ -0,0 +1,3 @@
+# go doc
+
+Prints documentation for Go packages, types, functions, and methods extracted from specially formatted comments. Use `go doc package` or `go doc package.Function` to view specific documentation. Essential for exploring APIs and verifying documentation formatting.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-fmt@CPFiclXXVQCsbooA0iCEy.md b/src/data/roadmaps/golang/content/go-fmt@CPFiclXXVQCsbooA0iCEy.md
new file mode 100644
index 000000000..fa382d459
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-fmt@CPFiclXXVQCsbooA0iCEy.md
@@ -0,0 +1,3 @@
+# go fmt
+
+Automatically formats Go source code according to official style guidelines. Standardizes indentation, spacing, alignment for consistent code style. Opinionated and non-configurable, eliminating formatting debates. Essential for clean, readable, community-standard code.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-generate@TstTkc_-2RZMOqtSIklEM.md b/src/data/roadmaps/golang/content/go-generate@TstTkc_-2RZMOqtSIklEM.md
new file mode 100644
index 000000000..d6f599738
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-generate@TstTkc_-2RZMOqtSIklEM.md
@@ -0,0 +1,3 @@
+# go generate
+
+The `go generate` command executes commands specified in `//go:generate` directives to generate Go source code. Used for code generation from templates, string methods, embedded resources, and running tools like protobuf compilers for build automation.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-install@k35Ogbvr9yTdJPo4RV4tM.md b/src/data/roadmaps/golang/content/go-install@k35Ogbvr9yTdJPo4RV4tM.md
new file mode 100644
index 000000000..82eebd7b5
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-install@k35Ogbvr9yTdJPo4RV4tM.md
@@ -0,0 +1,3 @@
+# go install
+
+Compiles and installs packages and dependencies. Creates executables in `$GOPATH/bin` for main packages. Use `go install package@version` to install specific versions of tools. Commonly used for installing CLI tools system-wide.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-logging/index.md b/src/data/roadmaps/golang/content/go-logging/index.md
deleted file mode 100644
index 1f3d2b406..000000000
--- a/src/data/roadmaps/golang/content/go-logging/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Logging
-
-Go has built-in features to make it easier for programmers to implement logging. Third parties have also built additional tools to make logging easier.
-
-Visit the following resources to learn more:
-
-- [@article@Logging in Go: Choosing a System and Using it](https://www.honeybadger.io/blog/golang-logging/)
-- [@article@Logging in Golang – How to Start](https://www.loggly.com/use-cases/logging-in-golang-how-to-start/)
-- [@feed@Explore top posts about Logging](https://app.daily.dev/tags/logging?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-logging/log-slog.md b/src/data/roadmaps/golang/content/go-logging/log-slog.md
deleted file mode 100644
index c05361e0e..000000000
--- a/src/data/roadmaps/golang/content/go-logging/log-slog.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# log/slog
-
-The `log` and `log/slog` (since go 1.21) packages are the standard logging packages in Go. These packages provides a simple logging API that can be used to log messages to the console or to a file.
-
-Visit the following resources to learn more:
-
-- [@official@Documentation: log](https://pkg.go.dev/log)
-- [@official@Documentation: slog](https://pkg.go.dev/log/slog)
-- [@official@Go Blog: Structured Logging with slog](https://go.dev/blog/slog)
-- [@article@Go by Example: Logging](https://gobyexample.com/logging)
-- [@feed@Explore top posts about Logging](https://app.daily.dev/tags/logging?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-logging/zap.md b/src/data/roadmaps/golang/content/go-logging/zap.md
deleted file mode 100644
index f453032d4..000000000
--- a/src/data/roadmaps/golang/content/go-logging/zap.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Zap
-
-Blazing fast, structured, leveled logging in Go.
-
-Visit the following resources to learn more:
-
-- [@opensource@Zap](https://github.com/uber-go/zap)
diff --git a/src/data/roadmaps/golang/content/go-logging/zerolog.md b/src/data/roadmaps/golang/content/go-logging/zerolog.md
deleted file mode 100644
index a92dc515b..000000000
--- a/src/data/roadmaps/golang/content/go-logging/zerolog.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Zerolog
-
-The zerolog package provides a fast and simple logger dedicated to JSON output.
-
-Zerolog's API is designed to provide both a great developer experience and stunning performance. Its unique chaining API allows zerolog to write JSON (or CBOR) log events by avoiding allocations and reflection.
-
-Visit the following resources to learn more:
-
-- [@opensource@Zerolog](https://github.com/rs/zerolog)
diff --git a/src/data/roadmaps/golang/content/go-microservices/go-kit.md b/src/data/roadmaps/golang/content/go-microservices/go-kit.md
deleted file mode 100644
index 8ef8fcb5e..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/go-kit.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Go kit
-
-Go kit is a programming toolkit for building microservices (or elegant monoliths) in Go. it solves common problems in distributed systems and application architecture so you can focus on delivering business value.
-
-Visit the following resources to learn more:
-
-- [@official@Go-kit Website](https://gokit.io/)
-- [@article@Microservices in Go using the Go kit](https://dev.to/eminetto/microservices-in-go-using-the-go-kit-jjf)
-- [@video@Building Microservices with the Go Kit Toolkit](https://www.youtube.com/watch?v=sjd2ePF3CuQ)
-- [@feed@Explore top posts about Golang](https://app.daily.dev/tags/golang?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-microservices/go-zero.md b/src/data/roadmaps/golang/content/go-microservices/go-zero.md
deleted file mode 100644
index 9dd5122ec..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/go-zero.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# go-zero
-
-go-zero is a web and rpc framework with lots of engineering best practices builtin. It’s born to ensure the stability of the busy services with resilience design, and has been serving sites with tens of millions users for years.
-
-Visit the following resources to learn more:
-
-- [@official@Go-zero](https://go-zero.dev/)
-- [@official@Go-zero Docs](https://go-zero.dev/docs/introduction)
-- [@opensource@Go-Zero](https://github.com/zeromicro/go-zero)
-- [@feed@Explore top posts about Golang](https://app.daily.dev/tags/golang?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-microservices/grpc-gateway.md b/src/data/roadmaps/golang/content/go-microservices/grpc-gateway.md
deleted file mode 100644
index 092fe45f0..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/grpc-gateway.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Grpc gateway
-
-gRPC-Gateway creates a layer over gRPC services that will act as a RESTful service to a client. It is a plugin of protoc. It reads a gRPC service definition and generates a reverse-proxy server which translates a RESTful JSON API into gRPC.
-
-Visit the following resources to learn more:
-
-- [@opensource@Grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway/)
-- [@official@Grpc-gateway Doc](https://grpc-ecosystem.github.io/grpc-gateway/)
-- [@feed@Explore top posts about gRPC](https://app.daily.dev/tags/grpc?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-microservices/grpc-go.md b/src/data/roadmaps/golang/content/go-microservices/grpc-go.md
deleted file mode 100644
index ab41d8d4e..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/grpc-go.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# gRPC Go
-
-Go language implementation of gRPC(gRPC is a technology for implementing RPC APIs).
-
-Visit the following resources to learn more:
-
-- [@opensource@gRPC-go](https://github.com/grpc/grpc-go/)
-- [@article@gRPC-go Doc](https://pkg.go.dev/google.golang.org/grpc/)
-- [@official@Basic tutorial introduction to gRPC in Go.](https://grpc.io/docs/languages/go/basics/)
-- [@feed@Explore top posts about gRPC](https://app.daily.dev/tags/grpc?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-microservices/index.md b/src/data/roadmaps/golang/content/go-microservices/index.md
deleted file mode 100644
index a8780076f..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/index.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Microservices
-
-Microservices are an architectural approach to software development that allows the creation of a distributed application from deployable services that allow communication through a well-defined API. Being a solution to monoliths.
-
-Visit the following resources to learn more:
-
-- [@article@Introduction to Microservices](https://developer.ibm.com/learningpaths/get-started-application-modernization/intro-microservices/introduction/)
-- [@official@Microservice Patterns and Resources by Chris Richardson](https://microservices.io/index.html)
-- [@article@Microservices AntiPatterns and Pitfalls - Mark Richards](https://www.oreilly.com/content/microservices-antipatterns-and-pitfalls/)
-- [@article@Building Microservices, 2nd Edition - Sam Newman](https://samnewman.io/books/building_microservices_2nd_edition/)
-- [@feed@Explore top posts about Microservices](https://app.daily.dev/tags/microservices?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-microservices/micro.md b/src/data/roadmaps/golang/content/go-microservices/micro.md
deleted file mode 100644
index 6e51612bc..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/micro.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Micro
-
-It is an API first development platform. It leverages the microservices architecture pattern and provides a set of services which act as the building blocks of a platform.
-
-Visit the following resources to learn more:
-
-- [@official@Micro Website](https://micro.dev/)
-- [@opensource@Micro](https://github.com/micro/micro)
diff --git a/src/data/roadmaps/golang/content/go-microservices/protocol-buffers.md b/src/data/roadmaps/golang/content/go-microservices/protocol-buffers.md
deleted file mode 100644
index 91b6de5da..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/protocol-buffers.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Protocol buffers
-
-Protocol Buffers(Protobuf) is a free, open-source, language-neutral, platform-neutral, extensible data format used to serialize structured data. It’s like JSON, except it's smaller and faster, and it generates native language bindings.
-
-Some of the advantages of using protocol buffers include:
-
-- Compact data storage
-- Fast parsing
-- Availability in many programming languages
-- Optimized functionality through automatically-generated classes
-
-Visit the following resources to learn more:
-
-- [@opensource@Protobuf](https://github.com/protocolbuffers/protobuf/)
-- [@article@Protobuf Doc](https://developers.google.com/protocol-buffers/)
-- [@article@Protobuf with Go](https://developers.google.com/protocol-buffers/docs/gotutorial/)
-- [@video@Protocol Buffers in Golang](https://www.youtube.com/watch?v=NoDRq6Twkts)
-- [@feed@Explore top posts about Backend Development](https://app.daily.dev/tags/backend?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-microservices/rpcx.md b/src/data/roadmaps/golang/content/go-microservices/rpcx.md
deleted file mode 100644
index 9dd6b8f06..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/rpcx.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Rpcx
-
-Rpcx is a RPC (Remote Procedure Call) framework like Alibaba Dubbo and Weibo Motan. Some of the advantages on using Rpcx:
-
-- Simple: easy to learn, easy to develop, easy to integrate and easy to deploy
-- Performance: high performance (>= grpc-go)
-- Cross-platform: support raw slice of bytes, JSON, Protobuf and MessagePack. Theoretically it can be used with java, php, python, c/c++, node.js, c# and other platforms
-- Service discovery and service governance: support zookeeper, etcd and consul.
-
-Visit the following resources to learn more:
-
-- [@official@Rpcx Official Website](https://rpcx.io/)
-- [@official@Rpcx Documentation](https://en.doc.rpcx.io/)
-- [@opensource@Rpcx](https://github.com/smallnest/rpcx)
diff --git a/src/data/roadmaps/golang/content/go-microservices/twirp.md b/src/data/roadmaps/golang/content/go-microservices/twirp.md
deleted file mode 100644
index 29f6ad26f..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/twirp.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Twirp
-
-Twirp is a framework for service-to-service communication emphasizing simplicity and minimalism. It generates routing and serialization from API definition files and lets you focus on your application's logic instead of thinking about folderol like HTTP methods and paths and JSON.
-
-Visit the following resources to learn more:
-
-- [@opensource@Twirp](https://github.com/twitchtv/twirp)
-- [@official@Getting Started](https://twitchtv.github.io/twirp/docs/intro.html)
diff --git a/src/data/roadmaps/golang/content/go-microservices/watermill.md b/src/data/roadmaps/golang/content/go-microservices/watermill.md
deleted file mode 100644
index 1ba6bccbe..000000000
--- a/src/data/roadmaps/golang/content/go-microservices/watermill.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Watermill
-
-Watermill is an event streaming library for handling asynchronous requests in Go. It provides multiple implementations for pub/sub.
-For example, you can use conventional pub/sub systems like Kafka or RabbitMQ, as well as HTTP or MySQL binlog, depending on your use case.
-
-Visit the following resources to learn more:
-
-- [@official@Watermill Website](https://watermill.io)
-- [@official@Watermill Documentation](https://watermill.io/docs/getting-started)
diff --git a/src/data/roadmaps/golang/content/go-mod-init@zWXJOXo8dRnuTvYlWOL6r.md b/src/data/roadmaps/golang/content/go-mod-init@zWXJOXo8dRnuTvYlWOL6r.md
new file mode 100644
index 000000000..3f020543a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-mod-init@zWXJOXo8dRnuTvYlWOL6r.md
@@ -0,0 +1,3 @@
+# go mod init
+
+Initializes new Go module by creating `go.mod` file with specified module path (typically repository URL). Marks directory as module root and enables module-based dependency management. First step for any new Go project.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-mod-tidy@6rwVq1bMSHoGatEfm9hkp.md b/src/data/roadmaps/golang/content/go-mod-tidy@6rwVq1bMSHoGatEfm9hkp.md
new file mode 100644
index 000000000..c1974778c
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-mod-tidy@6rwVq1bMSHoGatEfm9hkp.md
@@ -0,0 +1,3 @@
+# go mod tidy
+
+Ensures `go.mod` matches source code by adding missing requirements and removing unused dependencies. Updates `go.sum` with checksums. Essential for maintaining clean dependency management and ensuring reproducible builds before production deployment.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-mod-vendor@jOiAk5coeDNVXP2QiwQis.md b/src/data/roadmaps/golang/content/go-mod-vendor@jOiAk5coeDNVXP2QiwQis.md
new file mode 100644
index 000000000..a9d5a4384
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-mod-vendor@jOiAk5coeDNVXP2QiwQis.md
@@ -0,0 +1,3 @@
+# go mod vendor
+
+Creates `vendor` directory with dependency copies for bundling with source code. Ensures builds work without internet access. Useful for deployment, air-gapped environments, and complete control over dependency availability.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-mod@5hnaPrYSBzxEIxFeg5tCK.md b/src/data/roadmaps/golang/content/go-mod@5hnaPrYSBzxEIxFeg5tCK.md
new file mode 100644
index 000000000..2b148bff7
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-mod@5hnaPrYSBzxEIxFeg5tCK.md
@@ -0,0 +1,3 @@
+# go mod
+
+Command-line tool for module management. `go mod init` creates module, `go mod tidy` cleans dependencies, `go mod download` fetches modules. Manages go.mod and go.sum files. Essential commands for dependency management and version control.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-orms/gorm.md b/src/data/roadmaps/golang/content/go-orms/gorm.md
deleted file mode 100644
index 01a40ecad..000000000
--- a/src/data/roadmaps/golang/content/go-orms/gorm.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Gorm
-
-The GORM is fantastic ORM library for Golang, aims to be developer friendly. It is an ORM library for dealing with relational databases. This gorm library is developed on the top of database/sql package. The overview and feature of ORM are: Full-Featured ORM (almost)
-
-Visit the following resources to learn more:
-
-- [@official@Gorm](https://gorm.io/docs/index.html)
-- [@article@Gorm Package](https://pkg.go.dev/gorm.io/gorm)
-- [@video@GORM And MYSQL](https://youtu.be/1E_YycpCsXw?si=_XeaElLMMChaEZw3)
diff --git a/src/data/roadmaps/golang/content/go-orms/index.md b/src/data/roadmaps/golang/content/go-orms/index.md
deleted file mode 100644
index 5092109b2..000000000
--- a/src/data/roadmaps/golang/content/go-orms/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# ORMs
-
-Object–relational mapping (ORM, O/RM, and O/R mapping tool) in computer science is a programming technique for converting data between type systems using object-oriented programming languages. This creates, in effect, a "virtual object database", hence a layer of abstraction, that can be used from within the programming language. Most common ORM library in Go is GORM.
diff --git a/src/data/roadmaps/golang/content/go-realtime-communication/centrifugo.md b/src/data/roadmaps/golang/content/go-realtime-communication/centrifugo.md
deleted file mode 100644
index a412c7937..000000000
--- a/src/data/roadmaps/golang/content/go-realtime-communication/centrifugo.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Centrifugo
-
-Centrifugo is an open-source scalable real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, GRPC, SockJS, WebTransport). Centrifugo has the concept of a channel – so it's a user-facing PUB/SUB server.
-
-Visit the following resources to learn more:
-
-- [@opensource@Centrifugo](https://github.com/centrifugal/centrifugo)
-- [@official@Getting Started](https://centrifugal.dev/docs/getting-started/introduction)
diff --git a/src/data/roadmaps/golang/content/go-realtime-communication/index.md b/src/data/roadmaps/golang/content/go-realtime-communication/index.md
deleted file mode 100644
index 10339fe05..000000000
--- a/src/data/roadmaps/golang/content/go-realtime-communication/index.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Go realtime communication
-
-Just as it says in the name, real-time communication is the handling of requests concurrently and efficiently. Whether it is a chat/messaging app, an email service, a game server or any collaborative online project (for example, Excalidraw), there are a few different ways of handling real-time communication, but the most common is through the use of WebSockets. Other options for handling real-time communications include MQTT protocol and server-sent events, among others.
-
-Learn more from the following resources:
-
-- [@video@Golang websocket](https://youtu.be/G8SKhZMqvsE)
diff --git a/src/data/roadmaps/golang/content/go-realtime-communication/melody.md b/src/data/roadmaps/golang/content/go-realtime-communication/melody.md
deleted file mode 100644
index cf3fcaf8a..000000000
--- a/src/data/roadmaps/golang/content/go-realtime-communication/melody.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Melody
-
-Melody is websocket framework based on gorilla/websocket that abstracts away the tedious parts of handling websockets. It gets out of your way so you can write real-time apps.
-
-Visit the following resources to learn more:
-
-- [@opensource@Melody](https://github.com/olahol/melody)
-- [@opensource@websocket](https://github.com/gorilla/websocket)
diff --git a/src/data/roadmaps/golang/content/go-run@rW4QPWIS2TWzFY0Ljny2N.md b/src/data/roadmaps/golang/content/go-run@rW4QPWIS2TWzFY0Ljny2N.md
new file mode 100644
index 000000000..55d6de718
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-run@rW4QPWIS2TWzFY0Ljny2N.md
@@ -0,0 +1,3 @@
+# go run
+
+Compiles and executes Go programs in one step without creating executable files. Useful for testing, development, and running scripts. Takes Go source files as arguments. Convenient for quick execution during development without build artifacts.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-test@EskFmwCwOmZHcVzedPOJI.md b/src/data/roadmaps/golang/content/go-test@EskFmwCwOmZHcVzedPOJI.md
new file mode 100644
index 000000000..f691c1fbc
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-test@EskFmwCwOmZHcVzedPOJI.md
@@ -0,0 +1,3 @@
+# go test
+
+Command for running tests in Go packages. Automatically finds and executes functions starting with `Test`. Supports benchmarks (`Benchmark`), examples (`Example`), and sub-tests. Includes coverage analysis, parallel execution, and various output formats. Essential for TDD and quality assurance.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-testing-your-apps.md b/src/data/roadmaps/golang/content/go-testing-your-apps.md
deleted file mode 100644
index 3805c7a07..000000000
--- a/src/data/roadmaps/golang/content/go-testing-your-apps.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Testing Go Code
-
-Go has a built-in testing command that we can use to test our program.
-
-Visit the following resources to learn more:
-
-- [@official@Go Tutorial: Add a Test](https://go.dev/doc/tutorial/add-a-test)
-- [@article@Go by Example: Testing](https://gobyexample.com/testing)
-- [@article@YourBasic Go: Table-driven unit tests](https://yourbasic.org/golang/table-driven-unit-test/)
-- [@article@Learn Go with Tests](https://quii.gitbook.io/learn-go-with-tests/)
-- [@feed@Explore top posts about Testing](https://app.daily.dev/tags/testing?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-toolchain-and-tools@core-go-commands.md b/src/data/roadmaps/golang/content/go-toolchain-and-tools@core-go-commands.md
new file mode 100644
index 000000000..fed152221
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-toolchain-and-tools@core-go-commands.md
@@ -0,0 +1,3 @@
+# Go Toolchain and Tools
+
+The Go toolchain provides comprehensive development tools through the unified `go` command. It includes the compiler, linker, and utilities for compilation, dependency management, testing, and profiling. This integrated approach simplifies Go development with seamless, consistent tooling.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-version@LnhQJVsEaS_gSijCUqAMq.md b/src/data/roadmaps/golang/content/go-version@LnhQJVsEaS_gSijCUqAMq.md
new file mode 100644
index 000000000..77951d34c
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-version@LnhQJVsEaS_gSijCUqAMq.md
@@ -0,0 +1,3 @@
+# go version
+
+Displays the currently installed Go version, target OS, and architecture. Essential for verifying installation, troubleshooting environment issues, and ensuring compatibility across different development environments and teams.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-vet@qoQ6_5MgTu3ur1mkEgqG5.md b/src/data/roadmaps/golang/content/go-vet@qoQ6_5MgTu3ur1mkEgqG5.md
new file mode 100644
index 000000000..c89baf55a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/go-vet@qoQ6_5MgTu3ur1mkEgqG5.md
@@ -0,0 +1,3 @@
+# go vet
+
+Built-in tool analyzing Go source code for suspicious constructs likely to be bugs. Checks for unreachable code, incorrect printf formats, struct tag mistakes, and potential nil pointer dereferences. Automatically run by `go test`.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/go-web-frameworks/beego.md b/src/data/roadmaps/golang/content/go-web-frameworks/beego.md
deleted file mode 100644
index 39c054a8c..000000000
--- a/src/data/roadmaps/golang/content/go-web-frameworks/beego.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Beego
-
-Beego is used for rapid development of enterprise application in Go, including RESTful APIs, web apps and backend services. It is inspired by Tornado, Sinatra and Flask. beego has some Go-specific features such as interfaces and struct embedding.
-
-Visit the following resources to learn more:
-
-- [@opensource@Beego/Beego](https://github.com/beego/beego)
diff --git a/src/data/roadmaps/golang/content/go-web-frameworks/buffalo.md b/src/data/roadmaps/golang/content/go-web-frameworks/buffalo.md
deleted file mode 100644
index 30192ccc1..000000000
--- a/src/data/roadmaps/golang/content/go-web-frameworks/buffalo.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Buffalo
-
-Buffalo helps you to generate a web project that already has everything from front-end (JavaScript, SCSS, etc.) to the back-end (database, routing, etc.) already hooked up and ready to run. From there it provides easy APIs to build your web application quickly in Go.
-
-Visit the following resources to learn more:
-
-- [@opensource@Gobuffalo](https://github.com/gobuffalo/buffalo)
-- [@official@Official Docs](https://gobuffalo.io/)
diff --git a/src/data/roadmaps/golang/content/go-web-frameworks/echo.md b/src/data/roadmaps/golang/content/go-web-frameworks/echo.md
deleted file mode 100644
index dc1c2b06f..000000000
--- a/src/data/roadmaps/golang/content/go-web-frameworks/echo.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Echo
-
-Echo is a performance-focused, extensible, open-source Go web application framework. It is a minimalist web framework that stands between stdlib + router and a full-stack web framework.
-
-Visit the following resources to learn more:
-
-- [@opensource@Echo](https://github.com/labstack/echo)
-- [@official@Echo Website](https://echo.labstack.com/)
diff --git a/src/data/roadmaps/golang/content/go-web-frameworks/gin.md b/src/data/roadmaps/golang/content/go-web-frameworks/gin.md
deleted file mode 100644
index 00ada0e10..000000000
--- a/src/data/roadmaps/golang/content/go-web-frameworks/gin.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Gin
-
-Gin is a high-performance HTTP web framework written in Golang (Go). Gin has a martini-like API and claims to be up to 40 times faster. Gin allows you to build web applications and microservices in Go.
-
-Visit the following resources to learn more:
-
-- [@opensource@Gin](https://github.com/gin-gonic/gin)
-- [@article@Gin Web Framework](https://pkg.go.dev/github.com/gin-gonic/gin)
-- [@feed@Explore top posts about Golang](https://app.daily.dev/tags/golang?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-web-frameworks/gofiber.md b/src/data/roadmaps/golang/content/go-web-frameworks/gofiber.md
deleted file mode 100644
index 6c6b9e799..000000000
--- a/src/data/roadmaps/golang/content/go-web-frameworks/gofiber.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Gofiber
-
-Go Fiber is an Express-inspired framework for Golang. Go Fiber is a web framework built on top of fast HTTP. It can be used to handle operations such as routing/endpoints, middleware, server request, etc.
-
-Visit the following resources to learn more:
-
-- [@opensource@Fiber](https://github.com/gofiber/fiber)
-- [@official@Official Docs](https://docs.gofiber.io/)
diff --git a/src/data/roadmaps/golang/content/go-web-frameworks/gorilla.md b/src/data/roadmaps/golang/content/go-web-frameworks/gorilla.md
deleted file mode 100644
index b366ab6d0..000000000
--- a/src/data/roadmaps/golang/content/go-web-frameworks/gorilla.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Gorilla
-
-Gorilla is a web toolkit for the Go programming language that provides useful, composable packages for writing HTTP-based applications.
-
-Visit the following resources to learn more:
-
-- [@opensource@Gorilla](https://github.com/gorilla)
-- [@official@Gorilla Toolkit](https://www.gorillatoolkit.org/)
diff --git a/src/data/roadmaps/golang/content/go-web-frameworks/index.md b/src/data/roadmaps/golang/content/go-web-frameworks/index.md
deleted file mode 100644
index c6906f154..000000000
--- a/src/data/roadmaps/golang/content/go-web-frameworks/index.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Web Frameworks
-
-There are several famous web frameworks for Go. Most common ones being:
-
-- Beego
-- Gin
-- Revel
-- Echo
-- GoFiber
-
-Visit the following resources to learn more:
-
-- [@opensource@Comparison of Web Frameworks](https://github.com/diyan/go-web-framework-comparison)
-- [@feed@Explore top posts about Golang](https://app.daily.dev/tags/golang?ref=roadmapsh)
diff --git a/src/data/roadmaps/golang/content/go-web-frameworks/revel.md b/src/data/roadmaps/golang/content/go-web-frameworks/revel.md
deleted file mode 100644
index 5873646ec..000000000
--- a/src/data/roadmaps/golang/content/go-web-frameworks/revel.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Revel
-
-Revel organizes endpoints into Controllers. They provide easy data binding and form validation. Revel makes Go Templates simple to use at scale. Register functionality to be called before or after actions.
-
-Visit the following resources to learn more:
-
-- [@official@Revel](https://revel.github.io/tutorial/index.html)
-- [@article@Revel Packages](https://pkg.go.dev/github.com/revel/revel)
diff --git a/src/data/roadmaps/golang/content/goembed-for-embedding@iIPk-jK1vBCG_rKI_MPiu.md b/src/data/roadmaps/golang/content/goembed-for-embedding@iIPk-jK1vBCG_rKI_MPiu.md
new file mode 100644
index 000000000..36a407daa
--- /dev/null
+++ b/src/data/roadmaps/golang/content/goembed-for-embedding@iIPk-jK1vBCG_rKI_MPiu.md
@@ -0,0 +1,3 @@
+# go:embed for embedding
+
+The `go:embed` directive embeds files and directories into Go binaries at compile time using `//go:embed` comments. Useful for including static assets, configs, and templates directly in executables, creating self-contained binaries that don't require external files.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/goimports@6RpfXYHnOGmM6pZ6ZBb29.md b/src/data/roadmaps/golang/content/goimports@6RpfXYHnOGmM6pZ6ZBb29.md
new file mode 100644
index 000000000..28f7ec077
--- /dev/null
+++ b/src/data/roadmaps/golang/content/goimports@6RpfXYHnOGmM6pZ6ZBb29.md
@@ -0,0 +1,3 @@
+# goimports
+
+Tool automatically managing Go import statements by adding missing imports and removing unused ones while formatting code. More convenient than manual import management, integrates with editors for automatic execution on save.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/golangci-lint@hgiNcGh3ggf8dBJ8C0HCL.md b/src/data/roadmaps/golang/content/golangci-lint@hgiNcGh3ggf8dBJ8C0HCL.md
new file mode 100644
index 000000000..b4af5e67d
--- /dev/null
+++ b/src/data/roadmaps/golang/content/golangci-lint@hgiNcGh3ggf8dBJ8C0HCL.md
@@ -0,0 +1,3 @@
+# golangci-lint
+
+Fast, parallel runner for multiple Go linters including staticcheck, go vet, and revive. Provides unified configuration, output formatting, and performance optimization. Streamlines code quality workflows through a single comprehensive tool.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/gorm@fJdZIbAgOAB8nOEHQNsq6.md b/src/data/roadmaps/golang/content/gorm@fJdZIbAgOAB8nOEHQNsq6.md
new file mode 100644
index 000000000..a5a243f98
--- /dev/null
+++ b/src/data/roadmaps/golang/content/gorm@fJdZIbAgOAB8nOEHQNsq6.md
@@ -0,0 +1,3 @@
+# GORM
+
+Popular Object-Relational Mapping library for Go. Provides database abstraction with struct-based models, automatic migrations, associations, and query building. Supports multiple databases (MySQL, PostgreSQL, SQLite, SQL Server). Features hooks, transactions, and connection pooling.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/goroutines@08QOxnF3rKEDekrkX7w1j.md b/src/data/roadmaps/golang/content/goroutines@08QOxnF3rKEDekrkX7w1j.md
new file mode 100644
index 000000000..62b29d757
--- /dev/null
+++ b/src/data/roadmaps/golang/content/goroutines@08QOxnF3rKEDekrkX7w1j.md
@@ -0,0 +1,3 @@
+# Goroutines
+
+Lightweight threads managed by Go runtime enabling concurrent function execution. Created with `go` keyword prefix. Minimal memory overhead, can run thousands/millions concurrently. Runtime handles scheduling across CPU cores. Communicate through channels, fundamental to Go's concurrency.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/goto-discouraged@O29VoTfPiU8GZ_c16ZJIp.md b/src/data/roadmaps/golang/content/goto-discouraged@O29VoTfPiU8GZ_c16ZJIp.md
new file mode 100644
index 000000000..9bbb3edf1
--- /dev/null
+++ b/src/data/roadmaps/golang/content/goto-discouraged@O29VoTfPiU8GZ_c16ZJIp.md
@@ -0,0 +1,3 @@
+# goto (discouraged)
+
+Go includes `goto` statement but discourages its use. Can only jump to labels within same function. Creates unstructured code flow making programs hard to read, debug, and maintain. Use structured control flow (loops, functions, conditionals) instead. Rarely needed in modern Go programming.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/govulncheck@K__satcG2ETNRFBpPqrLw.md b/src/data/roadmaps/golang/content/govulncheck@K__satcG2ETNRFBpPqrLw.md
new file mode 100644
index 000000000..11f62dace
--- /dev/null
+++ b/src/data/roadmaps/golang/content/govulncheck@K__satcG2ETNRFBpPqrLw.md
@@ -0,0 +1,3 @@
+# govulncheck
+
+Go's official vulnerability scanner checking code and dependencies for known security vulnerabilities. Reports packages with vulnerabilities from Go database, provides severity info and remediation advice. Essential for maintaining secure applications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/grpc--protocol-buffers@tBY6UB3gWZAxHPCFHoU_d.md b/src/data/roadmaps/golang/content/grpc--protocol-buffers@tBY6UB3gWZAxHPCFHoU_d.md
new file mode 100644
index 000000000..fa790ca68
--- /dev/null
+++ b/src/data/roadmaps/golang/content/grpc--protocol-buffers@tBY6UB3gWZAxHPCFHoU_d.md
@@ -0,0 +1,3 @@
+# gRPC & Protocol Buffers
+
+gRPC is a high-performance RPC framework using Protocol Buffers for serialization. Provides streaming, authentication, load balancing, and code generation from `.proto` files. Excellent for microservices with type safety, efficient binary format, and cross-language compatibility.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/hello-world-in-go@PHHviBSqhYDSNuHBFbw3l.md b/src/data/roadmaps/golang/content/hello-world-in-go@PHHviBSqhYDSNuHBFbw3l.md
new file mode 100644
index 000000000..508db1abf
--- /dev/null
+++ b/src/data/roadmaps/golang/content/hello-world-in-go@PHHviBSqhYDSNuHBFbw3l.md
@@ -0,0 +1,3 @@
+# Hello World in Go
+
+Traditional first program demonstrating basic structure: `package main`, importing `fmt`, and `main()` function using `fmt.Println()`. Teaches Go syntax, compilation, execution, and verifies development environment setup. Entry point for learning Go.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/history-of-go@2rlmLn_yQQV-7DpX1qT98.md b/src/data/roadmaps/golang/content/history-of-go@2rlmLn_yQQV-7DpX1qT98.md
new file mode 100644
index 000000000..b8ab59465
--- /dev/null
+++ b/src/data/roadmaps/golang/content/history-of-go@2rlmLn_yQQV-7DpX1qT98.md
@@ -0,0 +1,3 @@
+# History of Go
+
+Created at Google in 2007 by Griesemer, Pike, and Thompson. Announced publicly in 2009, version 1.0 in 2012. Key milestones include modules (Go 1.11) and generics (Go 1.18). Designed for large-scale software development combining efficiency and simplicity.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/httptest--for-http-tests@Zt4FpqCEVlpMzclJeDiMs.md b/src/data/roadmaps/golang/content/httptest--for-http-tests@Zt4FpqCEVlpMzclJeDiMs.md
new file mode 100644
index 000000000..06d8825f3
--- /dev/null
+++ b/src/data/roadmaps/golang/content/httptest--for-http-tests@Zt4FpqCEVlpMzclJeDiMs.md
@@ -0,0 +1,3 @@
+# `httptest` for HTTP Tests
+
+The `httptest` package provides utilities for testing HTTP servers and clients without network connections. Includes `httptest.Server`, `ResponseRecorder`, and helpers for creating test requests. Essential for testing handlers, middleware, and HTTP services.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/if-else@2XaDvTJ5pyChgt1GFZF8W.md b/src/data/roadmaps/golang/content/if-else@2XaDvTJ5pyChgt1GFZF8W.md
new file mode 100644
index 000000000..28f81ff14
--- /dev/null
+++ b/src/data/roadmaps/golang/content/if-else@2XaDvTJ5pyChgt1GFZF8W.md
@@ -0,0 +1,3 @@
+# if-else
+
+Basic conditional statements for binary decision making. `if` tests condition, `else` handles alternative path. Can include optional initialization statement. No parentheses needed around condition but braces required. Foundation of program control flow.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/if@dC-1LotbW29C4zZJv6ak6.md b/src/data/roadmaps/golang/content/if@dC-1LotbW29C4zZJv6ak6.md
new file mode 100644
index 000000000..bd03daf38
--- /dev/null
+++ b/src/data/roadmaps/golang/content/if@dC-1LotbW29C4zZJv6ak6.md
@@ -0,0 +1,3 @@
+# if
+
+Basic conditional statement for executing code based on boolean conditions. Supports optional initialization statement before condition check. No parentheses required around condition but braces mandatory. Can be chained with else if for multiple conditions. Foundation of control flow.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/integers-signed-unsigned@EAqL8Up3J63AWCZnqQph0.md b/src/data/roadmaps/golang/content/integers-signed-unsigned@EAqL8Up3J63AWCZnqQph0.md
new file mode 100644
index 000000000..3c038eaa1
--- /dev/null
+++ b/src/data/roadmaps/golang/content/integers-signed-unsigned@EAqL8Up3J63AWCZnqQph0.md
@@ -0,0 +1,3 @@
+# Integers (Signed, Unsigned)
+
+Signed integers (int8, int16, int32, int64) handle positive/negative numbers. Unsigned (uint8, uint16, uint32, uint64) handle only non-negative but larger positive range. `int`/`uint` are platform-dependent. Choose based on range and memory needs.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/interfaces-basics@nkONsPlFYCMqzWHTm_EPB.md b/src/data/roadmaps/golang/content/interfaces-basics@nkONsPlFYCMqzWHTm_EPB.md
new file mode 100644
index 000000000..25e2c6228
--- /dev/null
+++ b/src/data/roadmaps/golang/content/interfaces-basics@nkONsPlFYCMqzWHTm_EPB.md
@@ -0,0 +1,3 @@
+# Interfaces Basics
+
+Define contracts through method signatures. Types automatically satisfy interfaces by implementing required methods. Declared with `type InterfaceName interface{}` syntax. Enable polymorphism and flexible, testable code depending on behavior rather than concrete types.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/interfaces@hIRMnPyHRGh8xCU8BTS2n.md b/src/data/roadmaps/golang/content/interfaces@hIRMnPyHRGh8xCU8BTS2n.md
new file mode 100644
index 000000000..8cb62de02
--- /dev/null
+++ b/src/data/roadmaps/golang/content/interfaces@hIRMnPyHRGh8xCU8BTS2n.md
@@ -0,0 +1,3 @@
+# Interfaces
+
+Define contracts specifying method signatures without implementation. Types satisfy interfaces implicitly by implementing required methods. Enable polymorphism and loose coupling. Empty interface `interface{}` accepts any type. Foundation of Go's type system and composition patterns.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/interpreted-string-literals@7h08RUNC_uAMI6vnGdcZ1.md b/src/data/roadmaps/golang/content/interpreted-string-literals@7h08RUNC_uAMI6vnGdcZ1.md
new file mode 100644
index 000000000..9e4317cf2
--- /dev/null
+++ b/src/data/roadmaps/golang/content/interpreted-string-literals@7h08RUNC_uAMI6vnGdcZ1.md
@@ -0,0 +1,3 @@
+# Interpreted String Literals
+
+Enclosed in double quotes (`"`) and process escape sequences like `\n`, `\t`, `\"`. Support Unicode characters and formatting. Most common string type, ideal for text needing control characters but requiring escaping of special characters.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/introduction-to-go@WwLLyHL5psm0GOI9bmOne.md b/src/data/roadmaps/golang/content/introduction-to-go@WwLLyHL5psm0GOI9bmOne.md
new file mode 100644
index 000000000..672103823
--- /dev/null
+++ b/src/data/roadmaps/golang/content/introduction-to-go@WwLLyHL5psm0GOI9bmOne.md
@@ -0,0 +1,3 @@
+# Introduction to Go
+
+Statically typed, compiled programming language developed at Google. Designed for simplicity, concurrency, and performance. Features garbage collection, strong typing, efficient compilation, built-in concurrency with goroutines and channels. Excellent for backend services, CLI tools, and distributed systems.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/io--file-handling@7SYEXD5r9WKEDfecQdO5d.md b/src/data/roadmaps/golang/content/io--file-handling@7SYEXD5r9WKEDfecQdO5d.md
new file mode 100644
index 000000000..e4c31de58
--- /dev/null
+++ b/src/data/roadmaps/golang/content/io--file-handling@7SYEXD5r9WKEDfecQdO5d.md
@@ -0,0 +1,3 @@
+# I/O & File Handling
+
+Go's I/O system provides comprehensive file and stream handling through `io` package interfaces (Reader, Writer, Closer) and `os` package file operations. The interface-based design allows working with files, network connections, and buffers using consistent patterns.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/iterating-maps@Q6ic-AGG_gnXEOdmqom89.md b/src/data/roadmaps/golang/content/iterating-maps@Q6ic-AGG_gnXEOdmqom89.md
new file mode 100644
index 000000000..d51afa354
--- /dev/null
+++ b/src/data/roadmaps/golang/content/iterating-maps@Q6ic-AGG_gnXEOdmqom89.md
@@ -0,0 +1,3 @@
+# Iterating Maps
+
+Use `for range` to iterate over maps, returns key and value pairs. Iteration order is random for security reasons. Use blank identifier `_` to ignore key or value. Cannot modify map during iteration unless creating new map. Safe to delete during iteration.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/iterating-strings@PC-azlCZ6wDCn1_nRyhUn.md b/src/data/roadmaps/golang/content/iterating-strings@PC-azlCZ6wDCn1_nRyhUn.md
new file mode 100644
index 000000000..262c5de2c
--- /dev/null
+++ b/src/data/roadmaps/golang/content/iterating-strings@PC-azlCZ6wDCn1_nRyhUn.md
@@ -0,0 +1,3 @@
+# Iterating Strings
+
+Iterate over strings with `for range` to get runes (Unicode code points) not bytes. Returns index and rune value. Direct indexing `str[i]` gives bytes. Use `[]rune(str)` to convert to rune slice for random access. Important for Unicode handling.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/json@uB1fE15OprBcwN7p7ffJF.md b/src/data/roadmaps/golang/content/json@uB1fE15OprBcwN7p7ffJF.md
new file mode 100644
index 000000000..173e96dc5
--- /dev/null
+++ b/src/data/roadmaps/golang/content/json@uB1fE15OprBcwN7p7ffJF.md
@@ -0,0 +1,3 @@
+# encoding/json
+
+Provides JSON encoding/decoding functionality essential for web APIs and data interchange. Marshals Go values to JSON and unmarshals JSON to Go using reflection. Supports struct tags, custom marshaling, various data types. Crucial for web services and API consumption.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/linters@static-analysis.md b/src/data/roadmaps/golang/content/linters@static-analysis.md
new file mode 100644
index 000000000..3001b67d2
--- /dev/null
+++ b/src/data/roadmaps/golang/content/linters@static-analysis.md
@@ -0,0 +1,3 @@
+# Linters
+
+Static analysis tools examining source code for errors, style violations, and quality issues without execution. Popular tools include revive, staticcheck, and golangci-lint. Integrate into editors and CI/CD pipelines to catch issues early and maintain consistent code standards.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/logging@mGia5cJ7HFVXM0Fx5xhQE.md b/src/data/roadmaps/golang/content/logging@mGia5cJ7HFVXM0Fx5xhQE.md
new file mode 100644
index 000000000..c7b0a9d8a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/logging@mGia5cJ7HFVXM0Fx5xhQE.md
@@ -0,0 +1,3 @@
+# Logging
+
+Essential for monitoring, debugging, maintaining production applications. Standard `log` package and `slog` (Go 1.21+) for structured logging. Popular libraries: Zap (high-performance), Zerolog (zero-allocation), Logrus (feature-rich). Use appropriate log levels and structured messages.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/loops@orpxzKHFcf1BDQSefHl6O.md b/src/data/roadmaps/golang/content/loops@orpxzKHFcf1BDQSefHl6O.md
new file mode 100644
index 000000000..c24750193
--- /dev/null
+++ b/src/data/roadmaps/golang/content/loops@orpxzKHFcf1BDQSefHl6O.md
@@ -0,0 +1,3 @@
+# Loops
+
+Go has only one looping construct: the flexible `for` loop. Basic form has initialization, condition, post statement. Supports `for range` for arrays, slices, maps, strings, channels. Can create infinite loops or while-style loops. Control with `break` and `continue`.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/make@PWrfmYnOJRlwgdFat91bC.md b/src/data/roadmaps/golang/content/make@PWrfmYnOJRlwgdFat91bC.md
new file mode 100644
index 000000000..4d0d2b441
--- /dev/null
+++ b/src/data/roadmaps/golang/content/make@PWrfmYnOJRlwgdFat91bC.md
@@ -0,0 +1,3 @@
+# make()
+
+Creates and initializes slices, maps, and channels. Unlike `new()`, returns usable values. Examples: `make([]int, 5, 10)` for slices, `make(map[string]int)` for maps, `make(chan int)` for channels. Essential for initializing reference types.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/maps@XupDuVRsM5VjdaNs7JaT5.md b/src/data/roadmaps/golang/content/maps@XupDuVRsM5VjdaNs7JaT5.md
new file mode 100644
index 000000000..beb21e505
--- /dev/null
+++ b/src/data/roadmaps/golang/content/maps@XupDuVRsM5VjdaNs7JaT5.md
@@ -0,0 +1,3 @@
+# Maps
+
+Built-in associative data type mapping keys to values. Reference types created with `make(map[KeyType]ValueType)` or map literals. Keys must be comparable types. Support insertion, deletion, lookup operations. Check existence with comma ok idiom: `value, ok := map[key]`.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/melody@N0EG-7sU9lGFwgidXuPkV.md b/src/data/roadmaps/golang/content/melody@N0EG-7sU9lGFwgidXuPkV.md
new file mode 100644
index 000000000..70622f33c
--- /dev/null
+++ b/src/data/roadmaps/golang/content/melody@N0EG-7sU9lGFwgidXuPkV.md
@@ -0,0 +1,3 @@
+# Melody
+
+Melody is a minimalist WebSocket framework for Go providing simple session management, message broadcasting, and connection handling. Features include rooms, automatic ping/pong, message limits, and clean integration with existing web frameworks for real-time apps.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/memory-management@ItMgLOzaUCCdiTk221pAF.md b/src/data/roadmaps/golang/content/memory-management@ItMgLOzaUCCdiTk221pAF.md
new file mode 100644
index 000000000..887e8d43f
--- /dev/null
+++ b/src/data/roadmaps/golang/content/memory-management@ItMgLOzaUCCdiTk221pAF.md
@@ -0,0 +1,3 @@
+# Memory Management
+
+Largely automatic through garbage collection. Runtime decides stack (fast, auto-cleaned) vs heap (slower, GC required) allocation via escape analysis. Understanding allocation patterns and avoiding memory leaks helps write efficient, scalable Go programs.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/memory-mgmt-in-depth@_2JpTdzmXxszFCauJONCi.md b/src/data/roadmaps/golang/content/memory-mgmt-in-depth@_2JpTdzmXxszFCauJONCi.md
new file mode 100644
index 000000000..965d56c9a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/memory-mgmt-in-depth@_2JpTdzmXxszFCauJONCi.md
@@ -0,0 +1,3 @@
+# Memory Mgmt. in Depth
+
+Deep memory management involves understanding garbage collection, escape analysis, allocation patterns, and optimization techniques. Covers stack vs heap allocation, memory pooling, reducing allocations, and GC interaction for high-performance applications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/methods-vs-functions@jx1vln8hqRJqVZfJi6CST.md b/src/data/roadmaps/golang/content/methods-vs-functions@jx1vln8hqRJqVZfJi6CST.md
new file mode 100644
index 000000000..d52619298
--- /dev/null
+++ b/src/data/roadmaps/golang/content/methods-vs-functions@jx1vln8hqRJqVZfJi6CST.md
@@ -0,0 +1,3 @@
+# Methods vs Functions
+
+Methods are functions with receiver arguments, defined outside type declaration. Enable object-like behavior on types. Functions are standalone, methods belong to specific types. Methods can have value or pointer receivers. Both can accept parameters and return values.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/mocks-and-stubs@LjLbm4JEZ19howOkju7zQ.md b/src/data/roadmaps/golang/content/mocks-and-stubs@LjLbm4JEZ19howOkju7zQ.md
new file mode 100644
index 000000000..3844695ba
--- /dev/null
+++ b/src/data/roadmaps/golang/content/mocks-and-stubs@LjLbm4JEZ19howOkju7zQ.md
@@ -0,0 +1,3 @@
+# Mocks and Stubs
+
+Mocks and stubs replace dependencies with controlled implementations for isolated testing. Stubs provide predefined responses while mocks verify method calls. Go's interfaces make mocking natural. Essential for testing without external dependencies.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/modules--dependencies@kep_536v13aS1V9XwHKSr.md b/src/data/roadmaps/golang/content/modules--dependencies@kep_536v13aS1V9XwHKSr.md
new file mode 100644
index 000000000..a33ee62f7
--- /dev/null
+++ b/src/data/roadmaps/golang/content/modules--dependencies@kep_536v13aS1V9XwHKSr.md
@@ -0,0 +1,3 @@
+# Modules & Dependencies
+
+Go modules are the dependency management system introduced in Go 1.11. Define module with `go.mod` file containing module path and dependencies. Use `go get` to add dependencies, `go mod tidy` to clean up. Supports semantic versioning and replacement directives. Essential for modern Go development.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/multiple-return-values@ai2s1bwiTcPzrXQTxFDwV.md b/src/data/roadmaps/golang/content/multiple-return-values@ai2s1bwiTcPzrXQTxFDwV.md
new file mode 100644
index 000000000..e868a883b
--- /dev/null
+++ b/src/data/roadmaps/golang/content/multiple-return-values@ai2s1bwiTcPzrXQTxFDwV.md
@@ -0,0 +1,3 @@
+# Multiple Return Values
+
+Go functions can return multiple values, commonly used for returning result and error. Syntax: `func name() (Type1, Type2)`. Caller receives all returned values or uses blank identifier `_` to ignore unwanted values. Idiomatic for error handling pattern.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/mutexes@6ydgmac11Zu9Ithe0kKj9.md b/src/data/roadmaps/golang/content/mutexes@6ydgmac11Zu9Ithe0kKj9.md
new file mode 100644
index 000000000..7c86f9d40
--- /dev/null
+++ b/src/data/roadmaps/golang/content/mutexes@6ydgmac11Zu9Ithe0kKj9.md
@@ -0,0 +1,3 @@
+# Mutexes
+
+Mutual exclusion locks from sync package ensuring only one goroutine accesses shared resource at a time. Use `Lock()` before and `Unlock()` after critical section. RWMutex allows multiple readers or single writer. Essential for protecting shared data from race conditions.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/named-return-values@HIvwT8Dcr6B2NjOjy9hFv.md b/src/data/roadmaps/golang/content/named-return-values@HIvwT8Dcr6B2NjOjy9hFv.md
new file mode 100644
index 000000000..221597922
--- /dev/null
+++ b/src/data/roadmaps/golang/content/named-return-values@HIvwT8Dcr6B2NjOjy9hFv.md
@@ -0,0 +1,3 @@
+# Named Return Values
+
+Function return parameters can be named and treated as variables within function. Initialized to zero values. `return` statement without arguments returns current values of named parameters. Improves readability and enables easier refactoring but use judiciously.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/nethttp-standard@NMLmbKjfMSqz-Iz2CooCl.md b/src/data/roadmaps/golang/content/nethttp-standard@NMLmbKjfMSqz-Iz2CooCl.md
new file mode 100644
index 000000000..54def222b
--- /dev/null
+++ b/src/data/roadmaps/golang/content/nethttp-standard@NMLmbKjfMSqz-Iz2CooCl.md
@@ -0,0 +1,3 @@
+# net/http Standard
+
+Standard library package for HTTP client/server functionality. Provides HTTP server with routing, middleware support, client for making requests. Handles TLS, HTTP/2, cookies, multipart forms. Foundation for web development without external frameworks.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/orms--db-access@VcHHuIZ4lGzTxOoTwxA3e.md b/src/data/roadmaps/golang/content/orms--db-access@VcHHuIZ4lGzTxOoTwxA3e.md
new file mode 100644
index 000000000..f96728f2c
--- /dev/null
+++ b/src/data/roadmaps/golang/content/orms--db-access@VcHHuIZ4lGzTxOoTwxA3e.md
@@ -0,0 +1,3 @@
+# ORMs & DB Access
+
+Go offers multiple database access approaches: raw SQL with database/sql, ORMs like GORM/Ent, and query builders. Choose based on complexity needs - raw SQL for performance, ORMs for rapid development, query builders for balance. Consider connection pooling and migrations.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/os@9S1gkzBvt32uLy0IFZjrg.md b/src/data/roadmaps/golang/content/os@9S1gkzBvt32uLy0IFZjrg.md
new file mode 100644
index 000000000..5afe12969
--- /dev/null
+++ b/src/data/roadmaps/golang/content/os@9S1gkzBvt32uLy0IFZjrg.md
@@ -0,0 +1,3 @@
+# os
+
+Standard library package providing operating system interface. Handles file operations, environment variables, process management, and system information. Includes functions for file I/O, directory operations, process control, and cross-platform OS interactions. Essential for system programming.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/package-import-rules@dA8SMhCev1NWNM1Tsxu57.md b/src/data/roadmaps/golang/content/package-import-rules@dA8SMhCev1NWNM1Tsxu57.md
new file mode 100644
index 000000000..d7272397a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/package-import-rules@dA8SMhCev1NWNM1Tsxu57.md
@@ -0,0 +1,3 @@
+# Package Import Rules
+
+Key rules: no circular imports, main package for executables, lowercase package names, exported identifiers start with capitals. Import paths are unique identifiers. Understanding ensures proper structure and follows Go conventions.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/packages@AcYzrGFrwmeVYFEfhEiSZ.md b/src/data/roadmaps/golang/content/packages@AcYzrGFrwmeVYFEfhEiSZ.md
new file mode 100644
index 000000000..fec5477cd
--- /dev/null
+++ b/src/data/roadmaps/golang/content/packages@AcYzrGFrwmeVYFEfhEiSZ.md
@@ -0,0 +1,3 @@
+# Packages
+
+Fundamental unit of code organization in Go. Group related functions, types, and variables. Defined by package declaration at file top. Exported names start with capital letters. Import with `import` statement. Enable modularity, reusability, and namespace management.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/panic-and-recover@2KyzUjcMiMgo_AvlPjYbx.md b/src/data/roadmaps/golang/content/panic-and-recover@2KyzUjcMiMgo_AvlPjYbx.md
new file mode 100644
index 000000000..f92fed982
--- /dev/null
+++ b/src/data/roadmaps/golang/content/panic-and-recover@2KyzUjcMiMgo_AvlPjYbx.md
@@ -0,0 +1,3 @@
+# `panic` and `recover`
+
+`panic()` stops execution and unwinds stack, `recover()` catches panics in deferred functions. Use sparingly for unrecoverable errors. While Go emphasizes explicit errors, panic/recover serve as safety net for exceptional situations.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/performance-and-debugging@profiling-tools.md b/src/data/roadmaps/golang/content/performance-and-debugging@profiling-tools.md
new file mode 100644
index 000000000..b8b2ff747
--- /dev/null
+++ b/src/data/roadmaps/golang/content/performance-and-debugging@profiling-tools.md
@@ -0,0 +1,3 @@
+# Performance and Debugging
+
+Go provides powerful debugging and profiling tools including pprof for CPU/memory analysis, trace for execution analysis, and race detector for concurrency issues. These tools help identify bottlenecks, optimize performance, and debug complex problems in production applications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/pgx@cOj6klfBzTQQ8G75umLQZ.md b/src/data/roadmaps/golang/content/pgx@cOj6klfBzTQQ8G75umLQZ.md
new file mode 100644
index 000000000..ca2f9fd14
--- /dev/null
+++ b/src/data/roadmaps/golang/content/pgx@cOj6klfBzTQQ8G75umLQZ.md
@@ -0,0 +1,3 @@
+# pgx
+
+pgx is a pure Go PostgreSQL driver providing both database/sql compatibility and native PostgreSQL features. Offers better performance than lib/pq, includes arrays, JSON support, connection pooling, and PostgreSQL-specific features like LISTEN/NOTIFY.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/pipeline@loozcCzPzkni7BOdcvt1S.md b/src/data/roadmaps/golang/content/pipeline@loozcCzPzkni7BOdcvt1S.md
new file mode 100644
index 000000000..4f9a99c12
--- /dev/null
+++ b/src/data/roadmaps/golang/content/pipeline@loozcCzPzkni7BOdcvt1S.md
@@ -0,0 +1,3 @@
+# Pipeline
+
+Concurrency pattern chaining processing stages where output of one stage becomes input of next. Each stage runs concurrently using goroutines and channels. Enables parallel processing and separation of concerns. Common in data processing, transformation workflows, and streaming applications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/plugins--dynamic-loading@NlkrCAdUCJ7kU9meQJM5_.md b/src/data/roadmaps/golang/content/plugins--dynamic-loading@NlkrCAdUCJ7kU9meQJM5_.md
new file mode 100644
index 000000000..065f732d0
--- /dev/null
+++ b/src/data/roadmaps/golang/content/plugins--dynamic-loading@NlkrCAdUCJ7kU9meQJM5_.md
@@ -0,0 +1,3 @@
+# Plugins & Dynamic Loading
+
+Go's plugin system allows loading shared libraries (.so files) at runtime using the `plugin` package. Built with `go build -buildmode=plugin`. Enables modular architectures but has limitations: Unix-only, version compatibility issues, and complexity.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/pointer-receivers@6NKgb-OjGdT3QsMrDU05b.md b/src/data/roadmaps/golang/content/pointer-receivers@6NKgb-OjGdT3QsMrDU05b.md
new file mode 100644
index 000000000..bf41b6650
--- /dev/null
+++ b/src/data/roadmaps/golang/content/pointer-receivers@6NKgb-OjGdT3QsMrDU05b.md
@@ -0,0 +1,3 @@
+# Pointer Receivers
+
+Methods receive pointer to struct rather than copy using `func (p *Type) methodName()` syntax. Necessary when method modifies receiver state or struct is large. Go automatically handles value/pointer conversion when calling methods.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/pointers-basics@P0fUxEbb3bVYg35VWyg8R.md b/src/data/roadmaps/golang/content/pointers-basics@P0fUxEbb3bVYg35VWyg8R.md
new file mode 100644
index 000000000..d50361173
--- /dev/null
+++ b/src/data/roadmaps/golang/content/pointers-basics@P0fUxEbb3bVYg35VWyg8R.md
@@ -0,0 +1,3 @@
+# Pointer Basics
+
+Variables storing memory addresses of other variables. Declared with `*Type`, dereferenced with `*ptr`, address obtained with `&var`. Enable efficient memory usage and allow functions to modify caller's data. Essential for performance and reference semantics.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/pointers-with-structs@NfYlEY8f_YPITT6Exp3Iw.md b/src/data/roadmaps/golang/content/pointers-with-structs@NfYlEY8f_YPITT6Exp3Iw.md
new file mode 100644
index 000000000..b4ff2ce84
--- /dev/null
+++ b/src/data/roadmaps/golang/content/pointers-with-structs@NfYlEY8f_YPITT6Exp3Iw.md
@@ -0,0 +1,3 @@
+# Pointers with Structs
+
+Pointers to structs enable efficient passing of large structures and allow modification of struct fields. Access fields with `(*ptr).field` or shorthand `ptr.field`. Common for method receivers and when structs need to be modified by functions. Essential for memory efficiency.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/pointers@naBjKGrTBzlpapXzLHfvG.md b/src/data/roadmaps/golang/content/pointers@naBjKGrTBzlpapXzLHfvG.md
new file mode 100644
index 000000000..81e47a451
--- /dev/null
+++ b/src/data/roadmaps/golang/content/pointers@naBjKGrTBzlpapXzLHfvG.md
@@ -0,0 +1,3 @@
+# Pointers
+
+Variables storing memory addresses of other variables. Enable efficient memory usage and allow functions to modify values. Declared with `*Type`, address obtained with `&`. No pointer arithmetic for safety. Essential for performance and building data structures.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/pprof@Blz9cpgKhuqtY75oUQw6I.md b/src/data/roadmaps/golang/content/pprof@Blz9cpgKhuqtY75oUQw6I.md
new file mode 100644
index 000000000..5088ec069
--- /dev/null
+++ b/src/data/roadmaps/golang/content/pprof@Blz9cpgKhuqtY75oUQw6I.md
@@ -0,0 +1,3 @@
+# pprof
+
+Built-in profiling tool for analyzing program performance. Profiles CPU usage, memory allocation, goroutines, blocking operations. Import `net/http/pprof` for web interface or use `go tool pprof` for analysis. Essential for performance optimization and bottleneck identification.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/publishing-modules@CysLmwRqmQzOGAKM01AKF.md b/src/data/roadmaps/golang/content/publishing-modules@CysLmwRqmQzOGAKM01AKF.md
new file mode 100644
index 000000000..6da603817
--- /dev/null
+++ b/src/data/roadmaps/golang/content/publishing-modules@CysLmwRqmQzOGAKM01AKF.md
@@ -0,0 +1,3 @@
+# Publishing Modules
+
+Share Go code through version control systems using semantic versioning tags. Go proxy system automatically discovers and serves modules. Follow Go conventions, maintain documentation, and ensure backward compatibility to contribute to the ecosystem.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/race-detection@GoV8yaQARJmO47e0_l_GY.md b/src/data/roadmaps/golang/content/race-detection@GoV8yaQARJmO47e0_l_GY.md
new file mode 100644
index 000000000..76d8eb39b
--- /dev/null
+++ b/src/data/roadmaps/golang/content/race-detection@GoV8yaQARJmO47e0_l_GY.md
@@ -0,0 +1,3 @@
+# Race Detection
+
+Built-in tool for detecting race conditions in concurrent programs. Enabled with `-race` flag during build/test/run. Detects unsynchronized access to shared variables from multiple goroutines. Performance overhead in race mode. Essential for debugging concurrent code safety.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/race-detector@7aTYeCd915F3UHqb6j0Az.md b/src/data/roadmaps/golang/content/race-detector@7aTYeCd915F3UHqb6j0Az.md
new file mode 100644
index 000000000..4f99891ce
--- /dev/null
+++ b/src/data/roadmaps/golang/content/race-detector@7aTYeCd915F3UHqb6j0Az.md
@@ -0,0 +1,3 @@
+# Race Detector
+
+Runtime tool detecting data races in concurrent programs using the `-race` flag. Tracks memory accesses and reports conflicts with detailed information including stack traces. Essential for finding concurrency bugs during development and testing.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/raw-string-literals@nzPe6XVqhtOZFbea6f2Hg.md b/src/data/roadmaps/golang/content/raw-string-literals@nzPe6XVqhtOZFbea6f2Hg.md
new file mode 100644
index 000000000..edcfb9e40
--- /dev/null
+++ b/src/data/roadmaps/golang/content/raw-string-literals@nzPe6XVqhtOZFbea6f2Hg.md
@@ -0,0 +1,3 @@
+# Raw String Literals
+
+Enclosed in backticks (\`) and interpret characters literally without escape sequences. Preserve formatting including newlines. Ideal for regex, file paths, SQL queries, JSON templates, and multi-line text where escaping would be extensive.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/realtime-communication@o2EYfm1WSd8Eq_ZcXYreo.md b/src/data/roadmaps/golang/content/realtime-communication@o2EYfm1WSd8Eq_ZcXYreo.md
new file mode 100644
index 000000000..f190ff070
--- /dev/null
+++ b/src/data/roadmaps/golang/content/realtime-communication@o2EYfm1WSd8Eq_ZcXYreo.md
@@ -0,0 +1,3 @@
+# Realtime Communication
+
+Realtime communication in Go enables instant bidirectional updates using WebSockets, Server-Sent Events, and messaging patterns. Go's concurrency makes it ideal for handling multiple connections. Essential for chat apps, live dashboards, and interactive applications requiring immediate synchronization.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/reflection@GO50AoBOjO-EaK3s36jSS.md b/src/data/roadmaps/golang/content/reflection@GO50AoBOjO-EaK3s36jSS.md
new file mode 100644
index 000000000..45675c528
--- /dev/null
+++ b/src/data/roadmaps/golang/content/reflection@GO50AoBOjO-EaK3s36jSS.md
@@ -0,0 +1,3 @@
+# Reflection
+
+Reflection allows runtime inspection and manipulation of types and values using the `reflect` package. Enables dynamic method calls and type examination but has performance overhead. Used in JSON marshaling, ORMs, and frameworks.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/regexp@9K5ffACdKNPJiWPq4tUWD.md b/src/data/roadmaps/golang/content/regexp@9K5ffACdKNPJiWPq4tUWD.md
new file mode 100644
index 000000000..3af570294
--- /dev/null
+++ b/src/data/roadmaps/golang/content/regexp@9K5ffACdKNPJiWPq4tUWD.md
@@ -0,0 +1,3 @@
+# regexp
+
+Standard library package for regular expression functionality. Implements RE2 syntax for safe, efficient pattern matching. Provides functions for matching, finding, replacing text patterns. Supports compiled expressions for performance. Essential for text processing, validation, parsing.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/revive@ksimJz7uvSh80ZIekSn_-.md b/src/data/roadmaps/golang/content/revive@ksimJz7uvSh80ZIekSn_-.md
new file mode 100644
index 000000000..c37c502e5
--- /dev/null
+++ b/src/data/roadmaps/golang/content/revive@ksimJz7uvSh80ZIekSn_-.md
@@ -0,0 +1,3 @@
+# revive
+
+Fast, configurable Go linter providing rich formatting and many rules for code analysis. Drop-in replacement for golint with better performance, configurable rules, and various output formats. Helps maintain consistent code quality across projects.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/runes@IAXI7OAAAG4fU6JvVNSZI.md b/src/data/roadmaps/golang/content/runes@IAXI7OAAAG4fU6JvVNSZI.md
new file mode 100644
index 000000000..e0d443c7d
--- /dev/null
+++ b/src/data/roadmaps/golang/content/runes@IAXI7OAAAG4fU6JvVNSZI.md
@@ -0,0 +1,3 @@
+# Runes
+
+Represent Unicode code points as `int32` type. Enable proper handling of international characters and emojis. Use single quotes like `'A'` or `'中'`. Essential for internationalized applications and correctly processing global text content beyond ASCII.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/scope-and-shadowing@xUKsD2eTP9-RszHvKYp9Y.md b/src/data/roadmaps/golang/content/scope-and-shadowing@xUKsD2eTP9-RszHvKYp9Y.md
new file mode 100644
index 000000000..f3c282509
--- /dev/null
+++ b/src/data/roadmaps/golang/content/scope-and-shadowing@xUKsD2eTP9-RszHvKYp9Y.md
@@ -0,0 +1,3 @@
+# Scope and Shadowing
+
+Scope determines variable accessibility from universe to block level. Shadowing occurs when inner scope variables hide outer ones with same names. Go has package, function, and block scopes. Understanding prevents bugs from accidentally creating new variables.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/security@vulnerability-scanning.md b/src/data/roadmaps/golang/content/security@vulnerability-scanning.md
new file mode 100644
index 000000000..b96f06a75
--- /dev/null
+++ b/src/data/roadmaps/golang/content/security@vulnerability-scanning.md
@@ -0,0 +1,3 @@
+# Security
+
+Go security involves input validation, secure communication, and vulnerability scanning. Built-in features like memory safety and strong typing help prevent issues. Tools like govulncheck identify dependency vulnerabilities, while static analysis detects security problems in code.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/select-statement@RBr1uAdngIsvSpIdHHOyV.md b/src/data/roadmaps/golang/content/select-statement@RBr1uAdngIsvSpIdHHOyV.md
new file mode 100644
index 000000000..7c3524c06
--- /dev/null
+++ b/src/data/roadmaps/golang/content/select-statement@RBr1uAdngIsvSpIdHHOyV.md
@@ -0,0 +1,3 @@
+# Select Statement
+
+Multiplexer for channel operations. Waits on multiple channel operations simultaneously, executing first one ready. Supports send/receive operations, default case for non-blocking behavior. Essential for coordinating multiple goroutines and implementing timeouts.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/sentinel-errors@vjfqq1XVS25FVe9smtel0.md b/src/data/roadmaps/golang/content/sentinel-errors@vjfqq1XVS25FVe9smtel0.md
new file mode 100644
index 000000000..f2b1b30b9
--- /dev/null
+++ b/src/data/roadmaps/golang/content/sentinel-errors@vjfqq1XVS25FVe9smtel0.md
@@ -0,0 +1,3 @@
+# Sentinel Errors
+
+Predefined error values representing specific conditions, defined as package-level variables. Check using `errors.Is()` or direct comparison. Examples: `io.EOF`. Enable predictable APIs where callers handle specific errors differently.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/setting-up-the-environment@J5mU0v491qrm-mr1W3Msd.md b/src/data/roadmaps/golang/content/setting-up-the-environment@J5mU0v491qrm-mr1W3Msd.md
new file mode 100644
index 000000000..333f9e6f7
--- /dev/null
+++ b/src/data/roadmaps/golang/content/setting-up-the-environment@J5mU0v491qrm-mr1W3Msd.md
@@ -0,0 +1,3 @@
+# Setting up the Environment
+
+Install Go from official website, configure PATH, and set up workspace. Configure editor with Go support (VS Code, GoLand, Vim/Emacs). Use modules for dependency management. Verify installation with `go version` and test with simple program.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/slice-to-array-conversion@j0zmfpaufr5TAZa_Bh8Vu.md b/src/data/roadmaps/golang/content/slice-to-array-conversion@j0zmfpaufr5TAZa_Bh8Vu.md
new file mode 100644
index 000000000..13c7dc1d1
--- /dev/null
+++ b/src/data/roadmaps/golang/content/slice-to-array-conversion@j0zmfpaufr5TAZa_Bh8Vu.md
@@ -0,0 +1,3 @@
+# Slice to Array Conversion
+
+Convert slice to array using `[N]T(slice)` (Go 1.17+). Copies data from slice to fixed-size array. Panics if slice has fewer than N elements. Useful when array semantics or specific size guarantees are needed.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/slices@3aoMFQXIh3Qdo04isHwe_.md b/src/data/roadmaps/golang/content/slices@3aoMFQXIh3Qdo04isHwe_.md
new file mode 100644
index 000000000..50848a054
--- /dev/null
+++ b/src/data/roadmaps/golang/content/slices@3aoMFQXIh3Qdo04isHwe_.md
@@ -0,0 +1,3 @@
+# Slices
+
+Dynamic arrays built on top of arrays. Reference types with length and capacity. Created with `make()` or slice literals. Support append, copy operations. More flexible than arrays - most commonly used sequence type in Go.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/slog@hFlbSSBMcJtjXNL8jAcbc.md b/src/data/roadmaps/golang/content/slog@hFlbSSBMcJtjXNL8jAcbc.md
new file mode 100644
index 000000000..884c88a2e
--- /dev/null
+++ b/src/data/roadmaps/golang/content/slog@hFlbSSBMcJtjXNL8jAcbc.md
@@ -0,0 +1,3 @@
+# slog
+
+Structured logging package introduced in Go 1.21. Provides leveled, structured logging with JSON output support. Better than basic log package for production use. Supports custom handlers, context integration, and performance optimization. Modern replacement for traditional logging.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/stack-traces--debugging@rR_BIgiSR63rVlO2Igzin.md b/src/data/roadmaps/golang/content/stack-traces--debugging@rR_BIgiSR63rVlO2Igzin.md
new file mode 100644
index 000000000..b254443ae
--- /dev/null
+++ b/src/data/roadmaps/golang/content/stack-traces--debugging@rR_BIgiSR63rVlO2Igzin.md
@@ -0,0 +1,3 @@
+# Stack Traces & Debugging
+
+Go automatically prints stack traces on panic showing call chain. Tools include Delve debugger, pprof profiling, and race detection. Stack traces show function calls, file locations, and line numbers for effective troubleshooting.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/standard-library@-Qy9DEWVYUNRHWiXXhIWU.md b/src/data/roadmaps/golang/content/standard-library@-Qy9DEWVYUNRHWiXXhIWU.md
new file mode 100644
index 000000000..4ac34a964
--- /dev/null
+++ b/src/data/roadmaps/golang/content/standard-library@-Qy9DEWVYUNRHWiXXhIWU.md
@@ -0,0 +1,3 @@
+# Standard Library
+
+Comprehensive collection of packages providing core functionality. Includes I/O, networking, text processing, cryptography, testing, JSON handling, HTTP client/server. Rich ecosystem reducing need for external dependencies. Well-documented, tested, and performance-optimized packages.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/staticcheck@954ffF8CmXYX-L36Lfl44.md b/src/data/roadmaps/golang/content/staticcheck@954ffF8CmXYX-L36Lfl44.md
new file mode 100644
index 000000000..9de35c8a2
--- /dev/null
+++ b/src/data/roadmaps/golang/content/staticcheck@954ffF8CmXYX-L36Lfl44.md
@@ -0,0 +1,3 @@
+# staticcheck
+
+State-of-the-art Go linter catching bugs, performance issues, and style problems through static analysis. Provides more comprehensive checking than go vet with very few false positives. Detects unused code, incorrect API usage, and subtle bugs.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/strings@ZxZpReGdPq8ziSlYmf2nj.md b/src/data/roadmaps/golang/content/strings@ZxZpReGdPq8ziSlYmf2nj.md
new file mode 100644
index 000000000..544357ad1
--- /dev/null
+++ b/src/data/roadmaps/golang/content/strings@ZxZpReGdPq8ziSlYmf2nj.md
@@ -0,0 +1,3 @@
+# Strings
+
+Immutable sequences of bytes representing UTF-8 encoded text. String operations create new strings rather than modifying existing ones. Iterate by bytes (indexing) or runes (for range). Convert between strings and byte slices. Understanding strings helps with text manipulation and performance.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/struct-tags--json@SW2uMlhfC-dnQakShs2km.md b/src/data/roadmaps/golang/content/struct-tags--json@SW2uMlhfC-dnQakShs2km.md
new file mode 100644
index 000000000..ca8709d45
--- /dev/null
+++ b/src/data/roadmaps/golang/content/struct-tags--json@SW2uMlhfC-dnQakShs2km.md
@@ -0,0 +1,3 @@
+# Struct Tags & JSON
+
+Struct tags provide metadata about fields using backticks with key-value pairs. JSON tags control field names, omit empty fields, or skip fields. Example: `json:"name,omitempty"`. Essential for APIs and data serialization formats.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/structs@wRwt9JHZPmq8uapxMjn0a.md b/src/data/roadmaps/golang/content/structs@wRwt9JHZPmq8uapxMjn0a.md
new file mode 100644
index 000000000..720e0c23d
--- /dev/null
+++ b/src/data/roadmaps/golang/content/structs@wRwt9JHZPmq8uapxMjn0a.md
@@ -0,0 +1,3 @@
+# Structs
+
+Custom data types grouping related fields under single name. Similar to classes but methods defined separately. Create complex data models, organize information, define application data structure. Access fields with dot notation, pass to functions. Fundamental for object-oriented designs.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/switch@ZmPhiTrB8EK0LDdaJOhc8.md b/src/data/roadmaps/golang/content/switch@ZmPhiTrB8EK0LDdaJOhc8.md
new file mode 100644
index 000000000..5c0578cdd
--- /dev/null
+++ b/src/data/roadmaps/golang/content/switch@ZmPhiTrB8EK0LDdaJOhc8.md
@@ -0,0 +1,3 @@
+# switch
+
+Clean way to compare variable against multiple values and execute corresponding code blocks. No break statements needed (no fall-through by default). Works with any comparable type, supports multiple values per case, expression/type switches. More readable than if-else chains.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/sync-package@nOI0juYhqJXNTiJBU4bKH.md b/src/data/roadmaps/golang/content/sync-package@nOI0juYhqJXNTiJBU4bKH.md
new file mode 100644
index 000000000..57c114a02
--- /dev/null
+++ b/src/data/roadmaps/golang/content/sync-package@nOI0juYhqJXNTiJBU4bKH.md
@@ -0,0 +1,3 @@
+# sync Package
+
+Provides synchronization primitives for coordinating goroutines and safe concurrent access. Includes Mutex (mutual exclusion), RWMutex (reader-writer locks), WaitGroup (waiting on goroutines), Once (one-time init). Essential for avoiding race conditions.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/table-driven-tests@6-mr65JzXbRzIukE7jzoZ.md b/src/data/roadmaps/golang/content/table-driven-tests@6-mr65JzXbRzIukE7jzoZ.md
new file mode 100644
index 000000000..9ef73f6c5
--- /dev/null
+++ b/src/data/roadmaps/golang/content/table-driven-tests@6-mr65JzXbRzIukE7jzoZ.md
@@ -0,0 +1,3 @@
+# Table-driven Tests
+
+Table-driven tests use slices of test cases to test multiple scenarios with the same logic. Each case contains inputs and expected outputs. Makes adding test cases easy and provides comprehensive coverage with minimal code duplication.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/testing-package-basics@nZkLFmm2GENL81y5LB0c1.md b/src/data/roadmaps/golang/content/testing-package-basics@nZkLFmm2GENL81y5LB0c1.md
new file mode 100644
index 000000000..eaecb9719
--- /dev/null
+++ b/src/data/roadmaps/golang/content/testing-package-basics@nZkLFmm2GENL81y5LB0c1.md
@@ -0,0 +1,3 @@
+# Testing Package Basics
+
+Standard library package for writing tests. Test functions start with `Test` and take `*testing.T` parameter. Use `t.Error()`, `t.Fatal()` for failures. Test files end with `_test.go`. Run with `go test`. Supports benchmarks and examples.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/time@aK9EQO1JR9hYIMkS3mdai.md b/src/data/roadmaps/golang/content/time@aK9EQO1JR9hYIMkS3mdai.md
new file mode 100644
index 000000000..4c48a2397
--- /dev/null
+++ b/src/data/roadmaps/golang/content/time@aK9EQO1JR9hYIMkS3mdai.md
@@ -0,0 +1,3 @@
+# time
+
+Standard library package for time and date operations. Handles parsing, formatting, arithmetic, timers, tickers, and timezone operations. Key types: Time, Duration, Location. Supports RFC3339 format, custom layouts, time zones. Essential for scheduling, timeouts, timestamps.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/trace@RE2jfECHkWvy3ldDZL938.md b/src/data/roadmaps/golang/content/trace@RE2jfECHkWvy3ldDZL938.md
new file mode 100644
index 000000000..20e77a68a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/trace@RE2jfECHkWvy3ldDZL938.md
@@ -0,0 +1,3 @@
+# trace
+
+The Go trace tool captures execution traces showing goroutine execution, system calls, GC, and scheduling. Generate traces with `runtime/trace` package, analyze with `go tool trace`. Provides web interface for diagnosing concurrency issues and performance bottlenecks.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/type-assertions@4EJ4WnH2HA3ci2uoqmNex.md b/src/data/roadmaps/golang/content/type-assertions@4EJ4WnH2HA3ci2uoqmNex.md
new file mode 100644
index 000000000..7194f7111
--- /dev/null
+++ b/src/data/roadmaps/golang/content/type-assertions@4EJ4WnH2HA3ci2uoqmNex.md
@@ -0,0 +1,3 @@
+# Type Assertions
+
+Extract underlying concrete value from interface. Syntax: `value.(Type)` or `value, ok := value.(Type)` for safe assertion. Panics if type assertion fails without ok form. Essential for working with interfaces and empty interfaces.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/type-constraints@8o6A2kGnupGYaaTwgsTDp.md b/src/data/roadmaps/golang/content/type-constraints@8o6A2kGnupGYaaTwgsTDp.md
new file mode 100644
index 000000000..49fd0b93a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/type-constraints@8o6A2kGnupGYaaTwgsTDp.md
@@ -0,0 +1,3 @@
+# Type Constraints
+
+Specify which types can be used as type arguments for generics. Defined using interfaces with method signatures or type sets. Common constraints include `any`, `comparable`, and custom constraints. Enable writing generic code that safely operates on type parameters.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/type-conversion@2IFxz3sFqDvUvzWNVwlWC.md b/src/data/roadmaps/golang/content/type-conversion@2IFxz3sFqDvUvzWNVwlWC.md
new file mode 100644
index 000000000..d65b3d809
--- /dev/null
+++ b/src/data/roadmaps/golang/content/type-conversion@2IFxz3sFqDvUvzWNVwlWC.md
@@ -0,0 +1,3 @@
+# Type Conversion
+
+Convert values between different types using `Type(value)` syntax. Go requires explicit conversion even between related types like `int` and `int64`. Essential for working with different data types and ensuring type compatibility in programs.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/type-inference@36gt0FmNDxuIIV47aqBeH.md b/src/data/roadmaps/golang/content/type-inference@36gt0FmNDxuIIV47aqBeH.md
new file mode 100644
index 000000000..6d02cb7d5
--- /dev/null
+++ b/src/data/roadmaps/golang/content/type-inference@36gt0FmNDxuIIV47aqBeH.md
@@ -0,0 +1,3 @@
+# Type Inference
+
+Allows compiler to automatically determine generic type arguments based on function arguments or context. Reduces need for explicit type specification while maintaining type safety. Makes generic functions cleaner and more readable by eliminating redundant type specifications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/type-switch@6r9XbwlBtHmJrhviG2cTD.md b/src/data/roadmaps/golang/content/type-switch@6r9XbwlBtHmJrhviG2cTD.md
new file mode 100644
index 000000000..b9033e1c5
--- /dev/null
+++ b/src/data/roadmaps/golang/content/type-switch@6r9XbwlBtHmJrhviG2cTD.md
@@ -0,0 +1,3 @@
+# Type Switch
+
+Special form of switch statement that operates on types rather than values. Syntax: `switch v := i.(type)`. Used with interfaces to determine underlying concrete type. Each case specifies types to match. Essential for handling interface{} and polymorphic code.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/unsafe-package@tM-AAWqMJsYZ1i6DCfBeD.md b/src/data/roadmaps/golang/content/unsafe-package@tM-AAWqMJsYZ1i6DCfBeD.md
new file mode 100644
index 000000000..77b10e4f3
--- /dev/null
+++ b/src/data/roadmaps/golang/content/unsafe-package@tM-AAWqMJsYZ1i6DCfBeD.md
@@ -0,0 +1,3 @@
+# Unsafe Package
+
+The `unsafe` package bypasses Go's type and memory safety for direct memory manipulation and pointer arithmetic. Powerful but dangerous - can cause crashes and vulnerabilities. Used for systems programming and performance-critical code. Use with extreme caution.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/urfavecli@bmNLSk-XuK2EuLxPR1Sxh.md b/src/data/roadmaps/golang/content/urfavecli@bmNLSk-XuK2EuLxPR1Sxh.md
new file mode 100644
index 000000000..10f4a0512
--- /dev/null
+++ b/src/data/roadmaps/golang/content/urfavecli@bmNLSk-XuK2EuLxPR1Sxh.md
@@ -0,0 +1,3 @@
+# urfave/cli
+
+urfave/cli is a simple package for building command-line applications with intuitive API for commands, flags, and arguments. Features automatic help generation, bash completion, nested subcommands, and environment variable integration for lightweight CLI tools.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/using-3rd-party-packages@eBv3i2cNA7vc01jLAbB8m.md b/src/data/roadmaps/golang/content/using-3rd-party-packages@eBv3i2cNA7vc01jLAbB8m.md
new file mode 100644
index 000000000..5e3a417b3
--- /dev/null
+++ b/src/data/roadmaps/golang/content/using-3rd-party-packages@eBv3i2cNA7vc01jLAbB8m.md
@@ -0,0 +1,3 @@
+# Using 3rd Party Packages
+
+Import external libraries using `go get package-url` which updates `go.mod`. Consider maintenance status, documentation, license, and security when choosing packages. Go modules handle version management and ensure reproducible builds.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/value-receivers@99a4irV044ybZN-boMgHv.md b/src/data/roadmaps/golang/content/value-receivers@99a4irV044ybZN-boMgHv.md
new file mode 100644
index 000000000..db6b0a2b6
--- /dev/null
+++ b/src/data/roadmaps/golang/content/value-receivers@99a4irV044ybZN-boMgHv.md
@@ -0,0 +1,3 @@
+# Value Receivers
+
+Methods receive copy of struct rather than pointer. Use `func (v Type) methodName()` syntax. Appropriate when method doesn't modify receiver or struct is small. Can be called on both values and pointers with Go automatically dereferencing.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/var-vs-@pJUkMcrUvcxuR_w89-eEq.md b/src/data/roadmaps/golang/content/var-vs-@pJUkMcrUvcxuR_w89-eEq.md
new file mode 100644
index 000000000..788f54709
--- /dev/null
+++ b/src/data/roadmaps/golang/content/var-vs-@pJUkMcrUvcxuR_w89-eEq.md
@@ -0,0 +1,3 @@
+# var vs :=
+
+Two variable declaration methods: `var` allows explicit types and package-level declarations, `:=` provides type inference and requires initialization (function-only). Choose based on context and type specification needs.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/var-vs@pJUkMcrUvcxuR_w89-eEq.md b/src/data/roadmaps/golang/content/var-vs@pJUkMcrUvcxuR_w89-eEq.md
new file mode 100644
index 000000000..d338c157b
--- /dev/null
+++ b/src/data/roadmaps/golang/content/var-vs@pJUkMcrUvcxuR_w89-eEq.md
@@ -0,0 +1 @@
+# var vs :=
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/variables--constants@BZKSsTgm28WV4nA74NYHO.md b/src/data/roadmaps/golang/content/variables--constants@BZKSsTgm28WV4nA74NYHO.md
new file mode 100644
index 000000000..aa1378962
--- /dev/null
+++ b/src/data/roadmaps/golang/content/variables--constants@BZKSsTgm28WV4nA74NYHO.md
@@ -0,0 +1,3 @@
+# Variables & Constants
+
+Variables store changeable values declared with `var` or `:=` (short declaration). Constants store unchangeable values declared with `const`. Variables can be explicitly typed or use type inference. Constants must be compile-time determinable. Both support block declarations and package/function scope.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/variadic-functions@MUJfa0jIL_S_b2ndNpVVw.md b/src/data/roadmaps/golang/content/variadic-functions@MUJfa0jIL_S_b2ndNpVVw.md
new file mode 100644
index 000000000..9b680446c
--- /dev/null
+++ b/src/data/roadmaps/golang/content/variadic-functions@MUJfa0jIL_S_b2ndNpVVw.md
@@ -0,0 +1,3 @@
+# Variadic Functions
+
+Functions accepting variable number of arguments of same type. Syntax: `func name(args ...Type)`. Arguments treated as slice inside function. Call with multiple args or slice with `...` operator. Common in functions like `fmt.Printf()` and `append()`.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/waitgroups@amqOwSgVFDymAsDIobwiK.md b/src/data/roadmaps/golang/content/waitgroups@amqOwSgVFDymAsDIobwiK.md
new file mode 100644
index 000000000..16b6dbea6
--- /dev/null
+++ b/src/data/roadmaps/golang/content/waitgroups@amqOwSgVFDymAsDIobwiK.md
@@ -0,0 +1,3 @@
+# WaitGroups
+
+Synchronization primitive from sync package for waiting on multiple goroutines to complete. Use `Add()` to increment counter, `Done()` when goroutine finishes, `Wait()` to block until counter reaches zero. Essential for coordinating goroutine completion in concurrent programs.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/web-development@CwGw3CDVLqErQGTwjzhmL.md b/src/data/roadmaps/golang/content/web-development@CwGw3CDVLqErQGTwjzhmL.md
new file mode 100644
index 000000000..895b1a850
--- /dev/null
+++ b/src/data/roadmaps/golang/content/web-development@CwGw3CDVLqErQGTwjzhmL.md
@@ -0,0 +1,3 @@
+# Web Development
+
+Excellent for web development with built-in HTTP server support, efficient concurrency, rich ecosystem. Standard `net/http` package provides powerful tools for servers, requests/responses, RESTful APIs. Performance, simple deployment (single binary), and concurrency make it ideal for scalable web apps.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/why-generics@9EdDI0vJaEmz3XxXMrpX9.md b/src/data/roadmaps/golang/content/why-generics@9EdDI0vJaEmz3XxXMrpX9.md
new file mode 100644
index 000000000..27830df15
--- /dev/null
+++ b/src/data/roadmaps/golang/content/why-generics@9EdDI0vJaEmz3XxXMrpX9.md
@@ -0,0 +1,3 @@
+# Why Generics?
+
+Introduced in Go 1.18 to solve code duplication when working with multiple types. Before generics: separate functions per type, empty interfaces (losing type safety), or code generation. Enable type-safe, reusable code maintaining compile-time checking.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/why-use-go@4PrkkoZ5fY-oow0O-bVhu.md b/src/data/roadmaps/golang/content/why-use-go@4PrkkoZ5fY-oow0O-bVhu.md
new file mode 100644
index 000000000..ffe887e8c
--- /dev/null
+++ b/src/data/roadmaps/golang/content/why-use-go@4PrkkoZ5fY-oow0O-bVhu.md
@@ -0,0 +1,3 @@
+# Why use Go
+
+Go offers exceptional performance with single binary deployment, built-in concurrency, fast compilation, and comprehensive standard library. Simple language that's easy to learn and maintain. Excels at web services, microservices, CLI tools, and system software.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/with-maps--slices@oAvCO3GOKktkbmPahkPlT.md b/src/data/roadmaps/golang/content/with-maps--slices@oAvCO3GOKktkbmPahkPlT.md
new file mode 100644
index 000000000..d5255b94a
--- /dev/null
+++ b/src/data/roadmaps/golang/content/with-maps--slices@oAvCO3GOKktkbmPahkPlT.md
@@ -0,0 +1,3 @@
+# Pointers with Maps & Slices
+
+Maps and slices are reference types - passing them to functions doesn't copy underlying data. Modifications inside functions affect original. No need for explicit pointers. However, reassigning the slice/map variable itself won't affect caller unless using pointer.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/worker-pools@z8ItWHAupaastLcXY3npY.md b/src/data/roadmaps/golang/content/worker-pools@z8ItWHAupaastLcXY3npY.md
new file mode 100644
index 000000000..03f0823c9
--- /dev/null
+++ b/src/data/roadmaps/golang/content/worker-pools@z8ItWHAupaastLcXY3npY.md
@@ -0,0 +1,3 @@
+# Worker Pools
+
+Concurrency pattern using fixed number of goroutines to process tasks from shared queue. Controls resource usage while maintaining parallelism. Typically implemented with buffered channels for task distribution and WaitGroups for synchronization. Ideal for CPU-bound tasks and rate limiting.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/wrappingunwrapping-errors@s2WlOMMKNXf6O2Qiqcm_m.md b/src/data/roadmaps/golang/content/wrappingunwrapping-errors@s2WlOMMKNXf6O2Qiqcm_m.md
new file mode 100644
index 000000000..94b636457
--- /dev/null
+++ b/src/data/roadmaps/golang/content/wrappingunwrapping-errors@s2WlOMMKNXf6O2Qiqcm_m.md
@@ -0,0 +1,3 @@
+# Wrapping/Unwrapping Errors
+
+Create error chains preserving original errors while adding context using `fmt.Errorf()` with `%w` verb. Use `errors.Unwrap()`, `errors.Is()`, and `errors.As()` to work with wrapped errors. Enables rich error contexts for easier debugging.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/zap@4D8QsZVAUB9vGbVFgRHt4.md b/src/data/roadmaps/golang/content/zap@4D8QsZVAUB9vGbVFgRHt4.md
new file mode 100644
index 000000000..7150c084d
--- /dev/null
+++ b/src/data/roadmaps/golang/content/zap@4D8QsZVAUB9vGbVFgRHt4.md
@@ -0,0 +1,3 @@
+# Zap
+
+Zap is a high-performance structured logging library by Uber offering both structured and printf-style APIs. Features include JSON/console formats, configurable levels, sampling, and production-optimized performance through careful memory management.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/zero-values@QWixUXjC8YG-i1gsKVY1v.md b/src/data/roadmaps/golang/content/zero-values@QWixUXjC8YG-i1gsKVY1v.md
new file mode 100644
index 000000000..a37d32bb3
--- /dev/null
+++ b/src/data/roadmaps/golang/content/zero-values@QWixUXjC8YG-i1gsKVY1v.md
@@ -0,0 +1,3 @@
+# Zero Values
+
+Default values for uninitialized variables: `0` for numbers, `false` for booleans, `""` for strings, `nil` for pointers/slices/maps. Ensures predictable initial state and reduces initialization errors. Fundamental for reliable Go code.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/content/zerolog@TR7N68_evDMu3qWHbGJcz.md b/src/data/roadmaps/golang/content/zerolog@TR7N68_evDMu3qWHbGJcz.md
new file mode 100644
index 000000000..f94def726
--- /dev/null
+++ b/src/data/roadmaps/golang/content/zerolog@TR7N68_evDMu3qWHbGJcz.md
@@ -0,0 +1,3 @@
+# Zerolog
+
+Zerolog is a zero-allocation JSON logger focusing on performance and simplicity. Provides structured logging with fluent API, various log levels, and no memory allocations during operations, making it ideal for high-throughput production applications.
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/golang.json b/src/data/roadmaps/golang/golang.json
index 72a3fceb5..67937ff7a 100644
--- a/src/data/roadmaps/golang/golang.json
+++ b/src/data/roadmaps/golang/golang.json
@@ -1,5307 +1,44 @@
{
- "mockup": {
- "controls": {
- "control": [
- {
- "ID": "3675",
- "typeID": "Arrow",
- "zOrder": "0",
- "w": "120",
- "h": "177",
- "measuredW": "150",
- "measuredH": "100",
- "x": "625",
- "y": "834",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 120,
- "y": 176.5
- },
- "p1": {
- "x": 0.6311916037373609,
- "y": -0.052796621016254895
- },
- "p2": {
- "x": 0,
- "y": -0.5
- }
- }
- },
- {
- "ID": "3676",
- "typeID": "Arrow",
- "zOrder": "1",
- "w": "38",
- "h": "79",
- "measuredW": "150",
- "measuredH": "100",
- "x": "343",
- "y": "207",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "stroke": "dotted",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.7039806190217623,
- "y": -0.22079278225638052
- },
- "p2": {
- "x": 38,
- "y": 78
- }
- }
- },
- {
- "ID": "3677",
- "typeID": "Arrow",
- "zOrder": "2",
- "w": "206",
- "h": "329",
- "measuredW": "150",
- "measuredH": "100",
- "x": "626",
- "y": "1299",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.4190752404149273,
- "y": 0.21784346648791786
- },
- "p2": {
- "x": 206,
- "y": 329
- }
- }
- },
- {
- "ID": "3678",
- "typeID": "Arrow",
- "zOrder": "3",
- "w": "1",
- "h": "69",
- "measuredW": "150",
- "measuredH": "100",
- "x": "547",
- "y": "1311",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": -0.5,
- "y": 0
- },
- "p1": {
- "x": 0.37281767955801104,
- "y": 0.003535911602209944
- },
- "p2": {
- "x": -0.5,
- "y": 69
- }
- }
- },
- {
- "ID": "3679",
- "typeID": "Arrow",
- "zOrder": "4",
- "w": "1",
- "h": "69",
- "measuredW": "150",
- "measuredH": "100",
- "x": "394",
- "y": "1300",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": -0.5,
- "y": 0
- },
- "p1": {
- "x": 0.37281767955801104,
- "y": 0.003535911602209944
- },
- "p2": {
- "x": -0.5,
- "y": 69
- }
- }
- },
- {
- "ID": "3680",
- "typeID": "Arrow",
- "zOrder": "5",
- "w": "140",
- "h": "78",
- "measuredW": "150",
- "measuredH": "100",
- "x": "267",
- "y": "1295",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 139.5,
- "y": 1
- },
- "p1": {
- "x": 0.5976080058579448,
- "y": -0.22367586038564805
- },
- "p2": {
- "x": -0.5,
- "y": 78.5
- }
- }
- },
- {
- "ID": "3681",
- "typeID": "Arrow",
- "zOrder": "6",
- "w": "121",
- "h": "3",
- "measuredW": "150",
- "measuredH": "100",
- "x": "638",
- "y": "1298",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": 120.5,
- "y": 2
- },
- "p1": {
- "x": 0.5993031358885019,
- "y": 0.01393728222996517
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3682",
- "typeID": "Arrow",
- "zOrder": "7",
- "w": "203",
- "h": "97",
- "measuredW": "150",
- "measuredH": "100",
- "x": "648",
- "y": "1201",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.573333003439147,
- "y": 0.10998342281713142
- },
- "p2": {
- "x": 203,
- "y": 96.5
- }
- }
- },
- {
- "ID": "3683",
- "typeID": "Arrow",
- "zOrder": "8",
- "w": "68",
- "h": "20",
- "measuredW": "150",
- "measuredH": "100",
- "x": "224",
- "y": "1237",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 67.5,
- "y": 0.5
- },
- "p1": {
- "x": 0.5100630820066085,
- "y": -0.10093121057374592
- },
- "p2": {
- "x": -0.5,
- "y": 19.5
- }
- }
- },
- {
- "ID": "3684",
- "typeID": "Arrow",
- "zOrder": "9",
- "w": "68",
- "h": "61",
- "measuredW": "150",
- "measuredH": "100",
- "x": "221",
- "y": "1238",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 67.5,
- "y": -0.5
- },
- "p1": {
- "x": 0.5024657534246576,
- "y": 0.1665753424657536
- },
- "p2": {
- "x": -0.5,
- "y": 60.5
- }
- }
- },
- {
- "ID": "3685",
- "typeID": "Arrow",
- "zOrder": "10",
- "w": "57",
- "h": "28",
- "measuredW": "150",
- "measuredH": "100",
- "x": "355",
- "y": "1201",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 56.5,
- "y": -0.5
- },
- "p1": {
- "x": 0.6131911728242003,
- "y": -0.0731465410364493
- },
- "p2": {
- "x": -0.5,
- "y": 27.5
- }
- }
- },
- {
- "ID": "3686",
- "typeID": "Arrow",
- "zOrder": "11",
- "w": "68",
- "h": "26",
- "measuredW": "150",
- "measuredH": "100",
- "x": "215",
- "y": "1184",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 67.5,
- "y": -0.5
- },
- "p1": {
- "x": 0.5348310364357182,
- "y": -0.0641872758164999
- },
- "p2": {
- "x": -0.5,
- "y": 25.5
- }
- }
- },
- {
- "ID": "3687",
- "typeID": "Arrow",
- "zOrder": "12",
- "w": "64",
- "h": "19",
- "measuredW": "150",
- "measuredH": "100",
- "x": "223",
- "y": "1157",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 63.5,
- "y": 18.5
- },
- "p1": {
- "x": 0.5728068207314337,
- "y": 0.12317702490464438
- },
- "p2": {
- "x": -0.5,
- "y": -0.5
- }
- }
- },
- {
- "ID": "3688",
- "typeID": "Arrow",
- "zOrder": "13",
- "w": "70",
- "h": "24",
- "measuredW": "150",
- "measuredH": "100",
- "x": "350",
- "y": "1173",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 69.5,
- "y": 23
- },
- "p1": {
- "x": 0.5649908976333847,
- "y": 0.09399243803388879
- },
- "p2": {
- "x": -0.5,
- "y": -0.5
- }
- }
- },
- {
- "ID": "3689",
- "typeID": "Arrow",
- "zOrder": "14",
- "w": "93",
- "h": "21",
- "measuredW": "150",
- "measuredH": "100",
- "x": "655",
- "y": "1153",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 93,
- "y": 21
- },
- "p1": {
- "x": 0.5575228437406796,
- "y": -0.08334914996881863
- },
- "p2": {
- "x": 0,
- "y": 1.5
- }
- }
- },
- {
- "ID": "3690",
- "typeID": "Arrow",
- "zOrder": "15",
- "w": "94",
- "h": "28",
- "measuredW": "150",
- "measuredH": "100",
- "x": "654",
- "y": "1119",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 94,
- "y": 0
- },
- "p1": {
- "x": 0.5179181109750058,
- "y": 0.06124736115092914
- },
- "p2": {
- "x": 0,
- "y": 27.5
- }
- }
- },
- {
- "ID": "3691",
- "typeID": "Arrow",
- "zOrder": "16",
- "w": "111",
- "h": "43",
- "measuredW": "150",
- "measuredH": "100",
- "x": "294",
- "y": "1055",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 110.5,
- "y": 43
- },
- "p1": {
- "x": 0.5740822925252013,
- "y": 0.09902998795409876
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3692",
- "typeID": "Arrow",
- "zOrder": "17",
- "w": "121",
- "h": "3",
- "measuredW": "150",
- "measuredH": "100",
- "x": "285",
- "y": "1104",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 120.5,
- "y": 2
- },
- "p1": {
- "x": 0.5993031358885019,
- "y": 0.01393728222996517
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3693",
- "typeID": "Arrow",
- "zOrder": "18",
- "w": "77",
- "h": "1",
- "measuredW": "150",
- "measuredH": "100",
- "x": "200",
- "y": "945",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 1.5
- },
- "p1": {
- "x": 0.4819277108433731,
- "y": 0.018072289156626502
- },
- "p2": {
- "x": 77,
- "y": 1.5
- }
- }
- },
- {
- "ID": "3694",
- "typeID": "Arrow",
- "zOrder": "19",
- "w": "99",
- "h": "108",
- "measuredW": "150",
- "measuredH": "100",
- "x": "320",
- "y": "949",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": 99,
- "y": 107.5
- },
- "p1": {
- "x": 0.4816540477577168,
- "y": 0.3011065812463601
- },
- "p2": {
- "x": 1,
- "y": 0
- }
- }
- },
- {
- "ID": "3695",
- "typeID": "Arrow",
- "zOrder": "20",
- "w": "1",
- "h": "69",
- "measuredW": "150",
- "measuredH": "100",
- "x": "639",
- "y": "972",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.4819277108433732,
- "y": 0.018072289156626505
- },
- "p2": {
- "x": 0,
- "y": 68.5
- }
- }
- },
- {
- "ID": "3696",
- "typeID": "Arrow",
- "zOrder": "21",
- "w": "1",
- "h": "69",
- "measuredW": "150",
- "measuredH": "100",
- "x": "556",
- "y": "975",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.4819277108433732,
- "y": 0.018072289156626505
- },
- "p2": {
- "x": 0,
- "y": 68.5
- }
- }
- },
- {
- "ID": "3697",
- "typeID": "Arrow",
- "zOrder": "22",
- "w": "1",
- "h": "69",
- "measuredW": "150",
- "measuredH": "100",
- "x": "484",
- "y": "977",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.4819277108433732,
- "y": 0.018072289156626505
- },
- "p2": {
- "x": 0,
- "y": 68.5
- }
- }
- },
- {
- "ID": "3698",
- "typeID": "Arrow",
- "zOrder": "23",
- "w": "1",
- "h": "69",
- "measuredW": "150",
- "measuredH": "100",
- "x": "424",
- "y": "974",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.4819277108433732,
- "y": 0.018072289156626505
- },
- "p2": {
- "x": 0,
- "y": 68.5
- }
- }
- },
- {
- "ID": "3699",
- "typeID": "Arrow",
- "zOrder": "24",
- "w": "94",
- "h": "1",
- "measuredW": "150",
- "measuredH": "100",
- "x": "666",
- "y": "1058",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 94,
- "y": 0.5
- },
- "p1": {
- "x": 0.6535117710266678,
- "y": -0.0007814789489108132
- },
- "p2": {
- "x": 0,
- "y": 0.5
- }
- }
- },
- {
- "ID": "3700",
- "typeID": "Arrow",
- "zOrder": "25",
- "w": "1",
- "h": "118",
- "measuredW": "150",
- "measuredH": "100",
- "x": "321",
- "y": "825",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": 1,
- "y": 117
- },
- "p1": {
- "x": 0.4340835430661428,
- "y": 0.0048163102717775075
- },
- "p2": {
- "x": 0,
- "y": -0.5
- }
- }
- },
- {
- "ID": "3701",
- "typeID": "Arrow",
- "zOrder": "26",
- "w": "2",
- "h": "68",
- "measuredW": "150",
- "measuredH": "100",
- "x": "157",
- "y": "816",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 2,
- "y": 68
- },
- "p1": {
- "x": 0.5297297297297298,
- "y": 0.021621621621621623
- },
- "p2": {
- "x": 1,
- "y": 0
- }
- }
- },
- {
- "ID": "3702",
- "typeID": "Arrow",
- "zOrder": "27",
- "w": "1",
- "h": "51",
- "measuredW": "150",
- "measuredH": "100",
- "x": "247",
- "y": "827",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 51
- },
- "p1": {
- "x": 0.5145945945945946,
- "y": -0.0075675675675675675
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3703",
- "typeID": "Arrow",
- "zOrder": "28",
- "w": "1",
- "h": "54",
- "measuredW": "150",
- "measuredH": "100",
- "x": "515",
- "y": "823",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.48192771084337327,
- "y": 0.018072289156626505
- },
- "p2": {
- "x": 0,
- "y": 54
- }
- }
- },
- {
- "ID": "3704",
- "typeID": "Arrow",
- "zOrder": "29",
- "w": "98",
- "h": "2",
- "measuredW": "150",
- "measuredH": "100",
- "x": "320",
- "y": "820",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": 98,
- "y": 0.5
- },
- "p1": {
- "x": 0.5245467907888293,
- "y": 0.010387065164135229
- },
- "p2": {
- "x": 0,
- "y": -0.5
- }
- }
- },
- {
- "ID": "3705",
- "typeID": "Arrow",
- "zOrder": "30",
- "w": "1",
- "h": "58",
- "measuredW": "150",
- "measuredH": "100",
- "x": "517",
- "y": "759",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.4819277108433734,
- "y": 0.018072289156626505
- },
- "p2": {
- "x": 0,
- "y": 57.5
- }
- }
- },
- {
- "ID": "3706",
- "typeID": "Arrow",
- "zOrder": "31",
- "w": "107",
- "h": "125",
- "measuredW": "150",
- "measuredH": "100",
- "x": "639",
- "y": "835",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 106.5,
- "y": 125
- },
- "p1": {
- "x": 0.6311916037373609,
- "y": -0.05279662101625488
- },
- "p2": {
- "x": -0.5,
- "y": 0
- }
- }
- },
- {
- "ID": "3707",
- "typeID": "Arrow",
- "zOrder": "32",
- "w": "91",
- "h": "69",
- "measuredW": "150",
- "measuredH": "100",
- "x": "650",
- "y": "833",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 90.5,
- "y": 69
- },
- "p1": {
- "x": 0.6311916037373609,
- "y": -0.0527966210162549
- },
- "p2": {
- "x": -0.5,
- "y": 0
- }
- }
- },
- {
- "ID": "3708",
- "typeID": "Arrow",
- "zOrder": "33",
- "w": "107",
- "h": "4",
- "measuredW": "150",
- "measuredH": "100",
- "x": "645",
- "y": "816",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 107,
- "y": 0
- },
- "p1": {
- "x": 0.599303135888502,
- "y": 0.013937282229965165
- },
- "p2": {
- "x": 0,
- "y": 3
- }
- }
- },
- {
- "ID": "3709",
- "typeID": "Arrow",
- "zOrder": "34",
- "w": "95",
- "h": "34",
- "measuredW": "150",
- "measuredH": "100",
- "x": "651",
- "y": "829",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 95,
- "y": 34
- },
- "p1": {
- "x": 0.6311916037373608,
- "y": -0.052796621016254944
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3710",
- "typeID": "Arrow",
- "zOrder": "35",
- "w": "109",
- "h": "57",
- "measuredW": "150",
- "measuredH": "100",
- "x": "643",
- "y": "762",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 108,
- "y": 0
- },
- "p1": {
- "x": 0.5854522369608072,
- "y": 0.026930401951284707
- },
- "p2": {
- "x": -0.5,
- "y": 56.5
- }
- }
- },
- {
- "ID": "3711",
- "typeID": "Arrow",
- "zOrder": "36",
- "w": "141",
- "h": "181",
- "measuredW": "150",
- "measuredH": "100",
- "x": "607",
- "y": "519",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 141,
- "y": 180.5
- },
- "p1": {
- "x": 0.5960734774514647,
- "y": -0.08589149348429012
- },
- "p2": {
- "x": 0,
- "y": -0.5
- }
- }
- },
- {
- "ID": "3712",
- "typeID": "Arrow",
- "zOrder": "37",
- "w": "125",
- "h": "133",
- "measuredW": "150",
- "measuredH": "100",
- "x": "627",
- "y": "521",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 125,
- "y": 132.5
- },
- "p1": {
- "x": 0.6144660011301564,
- "y": -0.09666603880203428
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3713",
- "typeID": "Arrow",
- "zOrder": "38",
- "w": "4",
- "h": "78",
- "measuredW": "150",
- "measuredH": "100",
- "x": "518",
- "y": "514",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 4.5,
- "y": 78
- },
- "p1": {
- "x": 0.4819277108433735,
- "y": 0.018072289156626516
- },
- "p2": {
- "x": 0.5,
- "y": 0
- }
- }
- },
- {
- "ID": "3714",
- "typeID": "Arrow",
- "zOrder": "39",
- "w": "2",
- "h": "83",
- "measuredW": "150",
- "measuredH": "100",
- "x": "442",
- "y": "513",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 1,
- "y": 83
- },
- "p1": {
- "x": 0.48192771084337344,
- "y": 0.018072289156626505
- },
- "p2": {
- "x": 1,
- "y": 0
- }
- }
- },
- {
- "ID": "3715",
- "typeID": "Arrow",
- "zOrder": "40",
- "w": "101",
- "h": "83",
- "measuredW": "150",
- "measuredH": "100",
- "x": "652",
- "y": "519",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 101,
- "y": 83
- },
- "p1": {
- "x": 0.5714745465184319,
- "y": -0.07492685781158573
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3716",
- "typeID": "Arrow",
- "zOrder": "41",
- "w": "27",
- "h": "64",
- "measuredW": "150",
- "measuredH": "100",
- "x": "392",
- "y": "320",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.46939890710382504,
- "y": -0.09672131147540984
- },
- "p2": {
- "x": 27,
- "y": 64
- }
- }
- },
- {
- "ID": "3717",
- "typeID": "__group__",
- "zOrder": "42",
- "measuredW": "535",
- "measuredH": "90",
- "w": "535",
- "h": "90",
- "x": "56",
- "y": "252",
- "properties": {
- "controlName": "ext_link:roadmap.sh/backend"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "535",
- "h": "90",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0"
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "384",
- "measuredH": "28",
- "x": "76",
- "y": "19",
- "properties": {
- "size": "20",
- "text": "Backend Roadmap till Language Selection"
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "153",
- "measuredH": "24",
- "x": "191",
- "y": "48",
- "properties": {
- "size": "16",
- "text": "roadmap.sh/backend",
- "color": "10027263"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3718",
- "typeID": "Arrow",
- "zOrder": "43",
- "w": "126",
- "h": "299",
- "measuredW": "150",
- "measuredH": "100",
- "x": "529",
- "y": "517",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.5666915052160955,
- "y": 0.2790611028315946
- },
- "p2": {
- "x": 69,
- "y": 298.5
- }
- }
- },
- {
- "ID": "3719",
- "typeID": "Arrow",
- "zOrder": "44",
- "w": "98",
- "h": "47",
- "measuredW": "150",
- "measuredH": "100",
- "x": "651",
- "y": "456",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 97.5,
- "y": -0.5
- },
- "p1": {
- "x": 0.5537800308573949,
- "y": 0.044853427374917355
- },
- "p2": {
- "x": 0,
- "y": 46
- }
- }
- },
- {
- "ID": "3720",
- "typeID": "Arrow",
- "zOrder": "45",
- "w": "120",
- "h": "44",
- "measuredW": "150",
- "measuredH": "100",
- "x": "647",
- "y": "515",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 120,
- "y": 44
- },
- "p1": {
- "x": 0.5846756207563067,
- "y": -0.036972790801407494
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3721",
- "typeID": "Arrow",
- "zOrder": "46",
- "w": "107",
- "h": "51",
- "measuredW": "150",
- "measuredH": "100",
- "x": "326",
- "y": "455",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 107,
- "y": 51
- },
- "p1": {
- "x": 0.5245584633234497,
- "y": 0.05852778135877272
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3722",
- "typeID": "Arrow",
- "zOrder": "47",
- "w": "108",
- "h": "44",
- "measuredW": "150",
- "measuredH": "100",
- "x": "326",
- "y": "512",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 108,
- "y": 0
- },
- "p1": {
- "x": 0.5656811947576956,
- "y": -0.05547089302042055
- },
- "p2": {
- "x": 0,
- "y": 44
- }
- }
- },
- {
- "ID": "3723",
- "typeID": "Arrow",
- "zOrder": "48",
- "w": "115",
- "h": "5",
- "measuredW": "150",
- "measuredH": "100",
- "x": "324",
- "y": "507",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 115,
- "y": 1
- },
- "p1": {
- "x": 0.5205160087037612,
- "y": 0.03901150139881877
- },
- "p2": {
- "x": 0,
- "y": 0
- }
- }
- },
- {
- "ID": "3724",
- "typeID": "Arrow",
- "zOrder": "49",
- "w": "123",
- "h": "3",
- "measuredW": "150",
- "measuredH": "100",
- "x": "627",
- "y": "508",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "stroke": "dotted",
- "color": "10027263",
- "p0": {
- "x": 122.5,
- "y": -0.5
- },
- "p1": {
- "x": 0.5536354056902003,
- "y": 0.01338250790305583
- },
- "p2": {
- "x": 0,
- "y": 1
- }
- }
- },
- {
- "ID": "3725",
- "typeID": "Label",
- "zOrder": "50",
- "measuredW": "37",
- "measuredH": "36",
- "x": "424",
- "y": "388",
- "properties": {
- "size": "28",
- "text": "Go"
- }
- },
- {
- "ID": "3726",
- "typeID": "Arrow",
- "zOrder": "51",
- "w": "51",
- "h": "59",
- "measuredW": "150",
- "measuredH": "100",
- "x": "450",
- "y": "436",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": 0,
- "y": 0
- },
- "p1": {
- "x": 0.5149949247946848,
- "y": -0.13269354987542692
- },
- "p2": {
- "x": 51,
- "y": 59
- }
- }
- },
- {
- "ID": "3727",
- "typeID": "__group__",
- "zOrder": "52",
- "measuredW": "262",
- "measuredH": "43",
- "w": "262",
- "h": "43",
- "x": "404",
- "y": "487",
- "properties": {
- "controlName": "100-go-basics"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "262",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "123",
- "measuredH": "24",
- "x": "69",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "Learn the Basics"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3728",
- "typeID": "__group__",
- "zOrder": "53",
- "measuredW": "247",
- "measuredH": "42",
- "w": "247",
- "h": "42",
- "x": "107",
- "y": "442",
- "properties": {
- "controlName": "100-go-basics:basic-syntax"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "247",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "w": "95",
- "measuredW": "92",
- "measuredH": "24",
- "x": "76",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Basic Syntax"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3729",
- "typeID": "__group__",
- "zOrder": "54",
- "measuredW": "249",
- "measuredH": "42",
- "w": "249",
- "h": "42",
- "x": "105",
- "y": "488",
- "properties": {
- "controlName": "101-go-basics:variables"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "249",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "183",
- "measuredH": "24",
- "x": "33",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Variables and declaration"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3730",
- "typeID": "__group__",
- "zOrder": "55",
- "measuredW": "280",
- "measuredH": "42",
- "w": "280",
- "h": "42",
- "x": "738",
- "y": "534",
- "properties": {
- "controlName": "109-go-basics:packages"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "280",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "222",
- "measuredH": "24",
- "x": "29",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Packages, imports and exports"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3731",
- "typeID": "__group__",
- "zOrder": "56",
- "measuredW": "280",
- "measuredH": "42",
- "w": "280",
- "h": "42",
- "x": "738",
- "y": "488",
- "properties": {
- "controlName": "108-go-basics:functions"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "280",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "247",
- "measuredH": "24",
- "x": "16",
- "y": "9",
- "properties": {
- "text": "Functions, multiple/named returns",
- "size": "16"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3732",
- "typeID": "__group__",
- "zOrder": "57",
- "measuredW": "350",
- "measuredH": "141",
- "w": "350",
- "h": "141",
- "x": "704",
- "y": "221",
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "350",
- "h": "141",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0"
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "314",
- "measuredH": "25",
- "x": "14",
- "y": "17",
- "properties": {
- "size": "17",
- "text": "Find the detailed version of this roadmap"
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "319",
- "measuredH": "25",
- "x": "14",
- "y": "45",
- "properties": {
- "size": "17",
- "text": "along with resources and other roadmaps"
- }
- },
- {
- "ID": "3",
- "typeID": "__group__",
- "zOrder": "3",
- "measuredW": "320",
- "measuredH": "45",
- "w": "320",
- "h": "45",
- "x": "15",
- "y": "81",
- "properties": {
- "controlName": "ext_link:roadmap.sh"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "320",
- "h": "45",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "borderColor": "4273622",
- "color": "4273622"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "105",
- "measuredH": "28",
- "x": "141",
- "y": "8",
- "properties": {
- "color": "16777215",
- "size": "20",
- "text": "roadmap.sh"
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "35",
- "measuredH": "28",
- "x": "76",
- "y": "8",
- "properties": {
- "color": "16777215",
- "size": "20",
- "text": "http"
- }
- },
- {
- "ID": "3",
- "typeID": "Label",
- "zOrder": "3",
- "measuredW": "5",
- "measuredH": "28",
- "x": "113",
- "y": "8",
- "properties": {
- "color": "16777215",
- "size": "20",
- "text": ":"
- }
- },
- {
- "ID": "4",
- "typeID": "Label",
- "zOrder": "4",
- "measuredW": "10",
- "measuredH": "28",
- "x": "120",
- "y": "9",
- "properties": {
- "color": "16777215",
- "size": "20",
- "text": "/"
- }
- },
- {
- "ID": "5",
- "typeID": "Label",
- "zOrder": "5",
- "measuredW": "10",
- "measuredH": "28",
- "x": "128",
- "y": "9",
- "properties": {
- "color": "16777215",
- "size": "20",
- "text": "/"
- }
- }
- ]
- }
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3733",
- "typeID": "__group__",
- "zOrder": "58",
- "measuredW": "280",
- "measuredH": "42",
- "w": "280",
- "h": "42",
- "x": "738",
- "y": "443",
- "properties": {
- "controlName": "107-go-basics:conditionals"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "280",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "w": "92",
- "measuredW": "90",
- "measuredH": "24",
- "x": "94",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Conditionals"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3734",
- "typeID": "__group__",
- "zOrder": "59",
- "measuredW": "127",
- "measuredH": "42",
- "w": "127",
- "h": "42",
- "x": "738",
- "y": "581",
- "properties": {
- "controlName": "110-go-basics:type-casting"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "127",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "94",
- "measuredH": "24",
- "x": "17",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Type Casting"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3735",
- "typeID": "__group__",
- "zOrder": "60",
- "measuredW": "146",
- "measuredH": "42",
- "w": "146",
- "h": "42",
- "x": "872",
- "y": "581",
- "properties": {
- "controlName": "111-go-basics:type-inference"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "146",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "109",
- "measuredH": "24",
- "x": "18",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Type Inference"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3736",
- "typeID": "__group__",
- "zOrder": "61",
- "measuredW": "106",
- "measuredH": "42",
- "w": "106",
- "h": "42",
- "x": "372",
- "y": "576",
- "properties": {
- "controlName": "103-go-basics:for-loop"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "106",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "65",
- "measuredH": "24",
- "x": "20",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "For Loop"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3737",
- "typeID": "__group__",
- "zOrder": "62",
- "measuredW": "192",
- "measuredH": "42",
- "w": "192",
- "h": "42",
- "x": "371",
- "y": "621",
- "properties": {
- "controlName": "105-go-basics:conditionals"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "192",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "145",
- "measuredH": "24",
- "x": "23",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "if, switch statements"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3738",
- "typeID": "__group__",
- "zOrder": "63",
- "measuredW": "262",
- "measuredH": "43",
- "w": "262",
- "h": "43",
- "x": "404",
- "y": "800",
- "properties": {
- "controlName": "101-go-advanced"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "262",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "103",
- "measuredH": "24",
- "x": "79",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "Going Deeper"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3739",
- "typeID": "__group__",
- "zOrder": "64",
- "measuredW": "181",
- "measuredH": "42",
- "w": "181",
- "h": "42",
- "x": "836",
- "y": "676",
- "properties": {
- "controlName": "116-go-basics:structs"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "181",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "51",
- "measuredH": "24",
- "x": "65",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Structs"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3740",
- "typeID": "__group__",
- "zOrder": "65",
- "measuredW": "143",
- "measuredH": "42",
- "w": "143",
- "h": "42",
- "x": "734",
- "y": "796",
- "properties": {
- "controlName": "103-go-advanced:interfaces"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "143",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "74",
- "measuredH": "24",
- "x": "35",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "Interfaces"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3741",
- "typeID": "__group__",
- "zOrder": "66",
- "measuredW": "84",
- "measuredH": "42",
- "w": "84",
- "h": "42",
- "x": "738",
- "y": "628",
- "properties": {
- "controlName": "112-go-basics:arrays"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "84",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "46",
- "measuredH": "24",
- "x": "19",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Arrays"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3742",
- "typeID": "__group__",
- "zOrder": "67",
- "measuredW": "92",
- "measuredH": "42",
- "w": "92",
- "h": "42",
- "x": "828",
- "y": "628",
- "properties": {
- "controlName": "113-go-basics:slices"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "92",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "43",
- "measuredH": "24",
- "x": "24",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Slices"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3743",
- "typeID": "__group__",
- "zOrder": "68",
- "measuredW": "94",
- "measuredH": "42",
- "w": "94",
- "h": "42",
- "x": "737",
- "y": "676",
- "properties": {
- "controlName": "115-go-basics:make"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "94",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "52",
- "measuredH": "24",
- "x": "21",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "make()"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3744",
- "typeID": "__group__",
- "zOrder": "69",
- "measuredW": "81",
- "measuredH": "42",
- "w": "81",
- "h": "42",
- "x": "482",
- "y": "576",
- "properties": {
- "controlName": "104-go-basics:range"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "81",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "43",
- "measuredH": "24",
- "x": "19",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "range"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3745",
- "typeID": "__group__",
- "zOrder": "70",
- "measuredW": "92",
- "measuredH": "42",
- "w": "92",
- "h": "42",
- "x": "925",
- "y": "628",
- "properties": {
- "controlName": "114-go-basics:maps"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "92",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "41",
- "measuredH": "24",
- "x": "25",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Maps"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3746",
- "typeID": "__group__",
- "zOrder": "71",
- "measuredW": "281",
- "measuredH": "42",
- "w": "281",
- "h": "42",
- "x": "735",
- "y": "750",
- "properties": {
- "controlName": "102-go-advanced:types-and-type-assertions"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "281",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "233",
- "measuredH": "24",
- "x": "24",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Types, Type Assertions, Switches"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3747",
- "typeID": "__group__",
- "zOrder": "72",
- "measuredW": "192",
- "measuredH": "42",
- "w": "192",
- "h": "42",
- "x": "371",
- "y": "667",
- "properties": {
- "controlName": "106-go-basics:errors-panic-recover"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "192",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "160",
- "measuredH": "24",
- "x": "16",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Errors, Panic, Recover"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3748",
- "typeID": "__group__",
- "zOrder": "73",
- "measuredW": "142",
- "measuredH": "42",
- "w": "142",
- "h": "42",
- "x": "735",
- "y": "842",
- "properties": {
- "controlName": "105-go-advanced:goroutines"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "142",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "80",
- "measuredH": "24",
- "x": "31",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Goroutines"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3749",
- "typeID": "__group__",
- "zOrder": "74",
- "measuredW": "134",
- "measuredH": "42",
- "w": "134",
- "h": "42",
- "x": "882",
- "y": "842",
- "properties": {
- "controlName": "106-go-advanced:channels"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "134",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "69",
- "measuredH": "24",
- "x": "32",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Channels"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3750",
- "typeID": "__group__",
- "zOrder": "75",
- "measuredW": "142",
- "measuredH": "42",
- "w": "142",
- "h": "42",
- "x": "735",
- "y": "888",
- "properties": {
- "controlName": "107-go-advanced:buffer"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "142",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "44",
- "measuredH": "24",
- "x": "49",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Buffer"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3751",
- "typeID": "__group__",
- "zOrder": "76",
- "measuredW": "134",
- "measuredH": "42",
- "w": "134",
- "h": "42",
- "x": "882",
- "y": "888",
- "properties": {
- "controlName": "108-go-advanced:select"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "134",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "46",
- "measuredH": "24",
- "x": "40",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Select"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3752",
- "typeID": "__group__",
- "zOrder": "77",
- "measuredW": "133",
- "measuredH": "42",
- "w": "133",
- "h": "42",
- "x": "883",
- "y": "934",
- "properties": {
- "controlName": "110-go-advanced:scheduler"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "133",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "w": "74",
- "measuredW": "74",
- "measuredH": "24",
- "x": "26",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Scheduler"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3753",
- "typeID": "__group__",
- "zOrder": "78",
- "measuredW": "145",
- "measuredH": "42",
- "w": "145",
- "h": "42",
- "x": "445",
- "y": "733",
- "properties": {
- "controlName": "100-go-advanced:go-modules"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "145",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "88",
- "measuredH": "24",
- "x": "29",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Go Modules"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3754",
- "typeID": "__group__",
- "zOrder": "79",
- "measuredW": "222",
- "measuredH": "43",
- "w": "222",
- "h": "43",
- "x": "119",
- "y": "799",
- "properties": {
- "controlName": "102-go-building-clis"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "222",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "97",
- "measuredH": "24",
- "x": "62",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "Building CLIs"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3755",
- "typeID": "__group__",
- "zOrder": "80",
- "measuredW": "237",
- "measuredH": "66",
- "w": "237",
- "h": "66",
- "x": "404",
- "y": "858",
- "properties": {
- "controlName": "101-go-advanced:working-with-json"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "237",
- "h": "66",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "207",
- "measuredH": "24",
- "x": "15",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Marshalling & Unmarshalling"
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "43",
- "measuredH": "24",
- "x": "97",
- "y": "33",
- "properties": {
- "size": "16",
- "text": "JSON"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3756",
- "typeID": "__group__",
- "zOrder": "81",
- "measuredW": "134",
- "measuredH": "42",
- "w": "134",
- "h": "42",
- "x": "882",
- "y": "796",
- "properties": {
- "controlName": "104-go-advanced:context"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "134",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "56",
- "measuredH": "24",
- "x": "39",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Context"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3757",
- "typeID": "__group__",
- "zOrder": "82",
- "measuredW": "73",
- "measuredH": "42",
- "w": "73",
- "h": "42",
- "x": "119",
- "y": "858",
- "properties": {
- "controlName": "100-go-building-clis:cobra"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "73",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "44",
- "measuredH": "24",
- "x": "15",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Cobra"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3758",
- "typeID": "__group__",
- "zOrder": "83",
- "measuredW": "100",
- "measuredH": "42",
- "w": "100",
- "h": "42",
- "x": "199",
- "y": "858",
- "properties": {
- "controlName": "101-go-building-clis:urfave-cli"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "68",
- "measuredH": "24",
- "x": "16",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "urfave/cli"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3759",
- "typeID": "__group__",
- "zOrder": "84",
- "measuredW": "275",
- "measuredH": "43",
- "w": "275",
- "h": "43",
- "x": "393",
- "y": "1036",
- "properties": {
- "controlName": "104-go-web-frameworks"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "275",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "125",
- "measuredH": "24",
- "x": "75",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "Web Frameworks"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3760",
- "typeID": "__group__",
- "zOrder": "85",
- "measuredW": "79",
- "measuredH": "42",
- "w": "79",
- "h": "42",
- "x": "373",
- "y": "946",
- "properties": {
- "controlName": "100-go-web-frameworks:beego"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "79",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "49",
- "measuredH": "24",
- "x": "15",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Beego"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3761",
- "typeID": "__group__",
- "zOrder": "86",
- "measuredW": "54",
- "measuredH": "42",
- "w": "54",
- "h": "42",
- "x": "458",
- "y": "946",
- "properties": {
- "controlName": "101-go-web-frameworks:gin"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "54",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "25",
- "measuredH": "24",
- "x": "14",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Gin"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3762",
- "typeID": "__group__",
- "zOrder": "87",
- "measuredW": "76",
- "measuredH": "42",
- "w": "76",
- "h": "42",
- "x": "519",
- "y": "946",
- "properties": {
- "controlName": "102-go-web-frameworks:revel"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "76",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "42",
- "measuredH": "24",
- "x": "17",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Revel"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3763",
- "typeID": "__group__",
- "zOrder": "88",
- "measuredW": "76",
- "measuredH": "42",
- "w": "76",
- "h": "42",
- "x": "602",
- "y": "946",
- "properties": {
- "controlName": "103-go-web-frameworks:echo"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "76",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "37",
- "measuredH": "24",
- "x": "19",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Echo"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3764",
- "typeID": "__group__",
- "zOrder": "89",
- "measuredW": "100",
- "measuredH": "42",
- "w": "100",
- "h": "42",
- "x": "845",
- "y": "1035",
- "properties": {
- "controlName": "104-go-web-frameworks:gorilla"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "47",
- "measuredH": "24",
- "x": "26",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Gorilla"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3765",
- "typeID": "__group__",
- "zOrder": "90",
- "measuredW": "110",
- "measuredH": "43",
- "w": "110",
- "h": "43",
- "x": "232",
- "y": "924",
- "properties": {
- "controlName": "103-go-orms"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "110",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "46",
- "measuredH": "24",
- "x": "32",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "ORMs"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3766",
- "typeID": "__group__",
- "zOrder": "91",
- "measuredW": "89",
- "measuredH": "42",
- "w": "89",
- "h": "42",
- "x": "119",
- "y": "925",
- "properties": {
- "controlName": "100-go-orms:gorm"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "89",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "50",
- "measuredH": "24",
- "x": "20",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "GORM"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3767",
- "typeID": "__group__",
- "zOrder": "92",
- "measuredW": "275",
- "measuredH": "43",
- "w": "275",
- "h": "43",
- "x": "393",
- "y": "1083",
- "properties": {
- "controlName": "105-go-logging"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "275",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "59",
- "measuredH": "24",
- "x": "100",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "Logging"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3768",
- "typeID": "__group__",
- "zOrder": "93",
- "measuredW": "93",
- "measuredH": "42",
- "w": "93",
- "h": "42",
- "x": "213",
- "y": "1083",
- "properties": {
- "controlName": "101-go-logging:zap"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "93",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "29",
- "measuredH": "24",
- "x": "32",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Zap"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3769",
- "typeID": "__group__",
- "zOrder": "94",
- "measuredW": "275",
- "measuredH": "43",
- "w": "275",
- "h": "43",
- "x": "393",
- "y": "1130",
- "properties": {
- "controlName": "106-go-realtime-communication"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "275",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "184",
- "measuredH": "24",
- "x": "46",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "Real time communication"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3770",
- "typeID": "__group__",
- "zOrder": "95",
- "measuredW": "205",
- "measuredH": "42",
- "w": "205",
- "h": "42",
- "x": "737",
- "y": "1112",
- "properties": {
- "controlName": "100-go-realtime-communication:melody"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "205",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "53",
- "measuredH": "24",
- "x": "76",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Melody"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3771",
- "typeID": "__group__",
- "zOrder": "96",
- "measuredW": "205",
- "measuredH": "42",
- "w": "205",
- "h": "42",
- "x": "737",
- "y": "1160",
- "properties": {
- "controlName": "101-go-realtime-communication:centrifugo"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "205",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "77",
- "measuredH": "24",
- "x": "64",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Centrifugo"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3772",
- "typeID": "__group__",
- "zOrder": "97",
- "measuredW": "275",
- "measuredH": "43",
- "w": "275",
- "h": "43",
- "x": "392",
- "y": "1178",
- "properties": {
- "controlName": "107-go-api-clients"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "275",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "80",
- "measuredH": "24",
- "x": "98",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "API Clients"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3773",
- "typeID": "__group__",
- "zOrder": "98",
- "measuredW": "90",
- "measuredH": "42",
- "w": "90",
- "h": "42",
- "x": "270",
- "y": "1159",
- "properties": {
- "controlName": "100-go-api-clients:rest"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "90",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "41",
- "measuredH": "24",
- "x": "24",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "REST"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3774",
- "typeID": "__group__",
- "zOrder": "99",
- "measuredW": "113",
- "measuredH": "42",
- "w": "113",
- "h": "42",
- "x": "119",
- "y": "1139",
- "properties": {
- "controlName": "100-go-api-clients:rest:heimdall"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "113",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "64",
- "measuredH": "24",
- "x": "25",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Heimdall"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3775",
- "typeID": "__group__",
- "zOrder": "100",
- "measuredW": "113",
- "measuredH": "42",
- "w": "113",
- "h": "42",
- "x": "119",
- "y": "1186",
- "properties": {
- "controlName": "101-go-api-clients:rest:grequests"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "113",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "82",
- "measuredH": "24",
- "x": "16",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "GRequests"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3776",
- "typeID": "__group__",
- "zOrder": "101",
- "measuredW": "90",
- "measuredH": "42",
- "w": "90",
- "h": "42",
- "x": "270",
- "y": "1208",
- "properties": {
- "controlName": "101-go-api-clients:graphql"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "90",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "67",
- "measuredH": "24",
- "x": "11",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "GraphQL"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3777",
- "typeID": "__group__",
- "zOrder": "102",
- "measuredW": "113",
- "measuredH": "42",
- "w": "113",
- "h": "42",
- "x": "119",
- "y": "1236",
- "properties": {
- "controlName": "100-go-api-clients:graphql:graphql-go"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "113",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "79",
- "measuredH": "24",
- "x": "17",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "graphql-go"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3778",
- "typeID": "__group__",
- "zOrder": "103",
- "measuredW": "113",
- "measuredH": "42",
- "w": "113",
- "h": "42",
- "x": "119",
- "y": "1282",
- "properties": {
- "controlName": "101-go-api-clients:graphql:gqlgen"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "113",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "50",
- "measuredH": "24",
- "x": "32",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "gqlgen"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3779",
- "typeID": "__group__",
- "zOrder": "104",
- "measuredW": "275",
- "measuredH": "43",
- "w": "275",
- "h": "43",
- "x": "735",
- "y": "1279",
- "properties": {
- "controlName": "108-go-testing-your-apps"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "275",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "128",
- "measuredH": "24",
- "x": "74",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "Testing your Apps"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3780",
- "typeID": "__group__",
- "zOrder": "105",
- "measuredW": "313",
- "measuredH": "43",
- "w": "313",
- "h": "43",
- "x": "356",
- "y": "1275",
- "properties": {
- "controlName": "109-go-microservices"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "313",
- "h": "43",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16776960"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "167",
- "measuredH": "24",
- "x": "73",
- "y": "10",
- "properties": {
- "size": "16",
- "text": "Tools for Microservices"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3781",
- "typeID": "__group__",
- "zOrder": "106",
- "measuredW": "179",
- "measuredH": "42",
- "w": "179",
- "h": "42",
- "x": "119",
- "y": "1365",
- "properties": {
- "controlName": "100-go-microservices:watermill"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "179",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "67",
- "measuredH": "24",
- "x": "56",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Watermill"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3782",
- "typeID": "__group__",
- "zOrder": "107",
- "measuredW": "148",
- "measuredH": "42",
- "w": "148",
- "h": "42",
- "x": "310",
- "y": "1365",
- "properties": {
- "controlName": "101-go-microservices:rpcx"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "148",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "32",
- "measuredH": "24",
- "x": "58",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "rpcx"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3783",
- "typeID": "__group__",
- "zOrder": "108",
- "measuredW": "148",
- "measuredH": "42",
- "w": "148",
- "h": "42",
- "x": "310",
- "y": "1410",
- "properties": {
- "controlName": "102-go-microservices:go-kit"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "148",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "44",
- "measuredH": "24",
- "x": "52",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Go-kit"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3784",
- "typeID": "__group__",
- "zOrder": "109",
- "measuredW": "148",
- "measuredH": "42",
- "w": "148",
- "h": "42",
- "x": "310",
- "y": "1456",
- "properties": {
- "controlName": "103-go-microservices:micro"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "148",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "41",
- "measuredH": "24",
- "x": "53",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Micro"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3785",
- "typeID": "__group__",
- "zOrder": "110",
- "measuredW": "148",
- "measuredH": "42",
- "w": "148",
- "h": "42",
- "x": "310",
- "y": "1502",
- "properties": {
- "controlName": "104-go-microservices:go-zero"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "148",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "56",
- "measuredH": "24",
- "x": "46",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "go-zero"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3786",
- "typeID": "__group__",
- "zOrder": "111",
- "measuredW": "148",
- "measuredH": "42",
- "w": "148",
- "h": "42",
- "x": "474",
- "y": "1365",
- "properties": {
- "controlName": "105-go-microservices:protocol-buffers"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "148",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "115",
- "measuredH": "24",
- "x": "16",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Protocol Buffers"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3787",
- "typeID": "__group__",
- "zOrder": "112",
- "measuredW": "148",
- "measuredH": "42",
- "w": "148",
- "h": "42",
- "x": "474",
- "y": "1411",
- "properties": {
- "controlName": "106-go-microservices:grpc-go"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "148",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "69",
- "measuredH": "24",
- "x": "39",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "gRPC-Go"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3788",
- "typeID": "__group__",
- "zOrder": "113",
- "measuredW": "148",
- "measuredH": "42",
- "w": "148",
- "h": "42",
- "x": "474",
- "y": "1457",
- "properties": {
- "controlName": "107-go-microservices:grpc-gateway"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "148",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "108",
- "measuredH": "24",
- "x": "20",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "gRPC-gateway"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3789",
- "typeID": "__group__",
- "zOrder": "114",
- "measuredW": "148",
- "measuredH": "42",
- "w": "148",
- "h": "42",
- "x": "474",
- "y": "1503",
- "properties": {
- "controlName": "108-go-microservices:twirp"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "148",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "35",
- "measuredH": "24",
- "x": "56",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "twirp"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3790",
- "typeID": "Arrow",
- "zOrder": "115",
- "w": "1",
- "h": "98",
- "measuredW": "150",
- "measuredH": "100",
- "x": "831",
- "y": "1656",
- "properties": {
- "curvature": "0",
- "leftArrow": "false",
- "rightArrow": "false",
- "color": "10027263",
- "p0": {
- "x": -0.5,
- "y": -0.5
- },
- "p1": {
- "x": 0.5259259259259262,
- "y": 0
- },
- "p2": {
- "x": -0.5,
- "y": 97
- },
- "stroke": "dotted"
- }
- },
- {
- "ID": "3791",
- "typeID": "__group__",
- "zOrder": "116",
- "measuredW": "468",
- "measuredH": "84",
- "w": "468",
- "h": "84",
- "x": "530",
- "y": "1601",
- "properties": {
- "controlName": "ext_link:roadmap.sh/backend"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "468",
- "h": "84",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0"
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "407",
- "measuredH": "28",
- "x": "30",
- "y": "16",
- "properties": {
- "size": "20",
- "text": "Backend Roadmap after Language Selection"
- }
- },
- {
- "ID": "2",
- "typeID": "Label",
- "zOrder": "2",
- "measuredW": "153",
- "measuredH": "24",
- "x": "157",
- "y": "44",
- "properties": {
- "size": "16",
- "text": "roadmap.sh/backend",
- "color": "10027263"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3792",
- "typeID": "__group__",
- "zOrder": "117",
- "measuredW": "102",
- "measuredH": "42",
- "w": "102",
- "h": "42",
- "x": "739",
- "y": "1035",
- "properties": {
- "controlName": "105-go-web-frameworks:gofiber"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "102",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "51",
- "measuredH": "24",
- "x": "25",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "gofiber"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3793",
- "typeID": "__group__",
- "zOrder": "118",
- "measuredW": "250",
- "measuredH": "246",
- "w": "250",
- "h": "246",
- "x": "104",
- "y": "536",
- "properties": {
- "controlName": "102-go-basics:data-types"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "250",
- "h": "246",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0"
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "81",
- "measuredH": "24",
- "x": "85",
- "y": "15",
- "properties": {
- "size": "16",
- "text": "Data Types"
- }
- },
- {
- "ID": "2",
- "typeID": "Canvas",
- "zOrder": "2",
- "w": "57",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "14",
- "y": "50",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "3",
- "typeID": "Label",
- "zOrder": "3",
- "measuredW": "31",
- "measuredH": "24",
- "x": "27",
- "y": "59",
- "properties": {
- "size": "16",
- "text": "bool"
- }
- },
- {
- "ID": "4",
- "typeID": "Canvas",
- "zOrder": "4",
- "w": "161",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "75",
- "y": "50",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "5",
- "typeID": "Label",
- "zOrder": "5",
- "measuredW": "129",
- "measuredH": "24",
- "x": "91",
- "y": "59",
- "properties": {
- "size": "16",
- "text": "int, int8/16/32/64"
- }
- },
- {
- "ID": "6",
- "typeID": "Canvas",
- "zOrder": "6",
- "w": "51",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "14",
- "y": "96",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "7",
- "typeID": "Label",
- "zOrder": "7",
- "measuredW": "31",
- "measuredH": "24",
- "x": "25",
- "y": "105",
- "properties": {
- "size": "16",
- "text": "byte"
- }
- },
- {
- "ID": "8",
- "typeID": "Canvas",
- "zOrder": "8",
- "w": "166",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "70",
- "y": "96",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "9",
- "typeID": "Label",
- "zOrder": "9",
- "measuredW": "147",
- "measuredH": "24",
- "x": "79",
- "y": "105",
- "properties": {
- "size": "16",
- "text": "uint, uint8/16/32/64"
- }
- },
- {
- "ID": "10",
- "typeID": "Canvas",
- "zOrder": "10",
- "w": "76",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "14",
- "y": "142",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "11",
- "typeID": "Label",
- "zOrder": "11",
- "measuredW": "34",
- "measuredH": "24",
- "x": "35",
- "y": "151",
- "properties": {
- "size": "16",
- "text": "rune"
- }
- },
- {
- "ID": "12",
- "typeID": "Canvas",
- "zOrder": "12",
- "w": "142",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "94",
- "y": "142",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "13",
- "typeID": "Label",
- "zOrder": "13",
- "measuredW": "108",
- "measuredH": "24",
- "x": "111",
- "y": "151",
- "properties": {
- "size": "16",
- "text": "float32, float64"
- }
- },
- {
- "ID": "14",
- "typeID": "Canvas",
- "zOrder": "14",
- "w": "138",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "14",
- "y": "189",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "15",
- "typeID": "Label",
- "zOrder": "15",
- "measuredW": "113",
- "measuredH": "24",
- "x": "25",
- "y": "198",
- "properties": {
- "size": "16",
- "text": "complex64/128"
- }
- },
- {
- "ID": "16",
- "typeID": "Canvas",
- "zOrder": "16",
- "w": "80",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "156",
- "y": "189",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "17",
- "typeID": "Label",
- "zOrder": "17",
- "measuredW": "47",
- "measuredH": "24",
- "x": "172",
- "y": "198",
- "properties": {
- "size": "16",
- "text": "uintptr"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3794",
- "typeID": "__group__",
- "zOrder": "119",
- "measuredW": "92",
- "measuredH": "42",
- "w": "92",
- "h": "42",
- "x": "117",
- "y": "1083",
- "properties": {
- "controlName": "100-go-logging:zerolog"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "92",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "56",
- "measuredH": "24",
- "x": "18",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Zerolog"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3795",
- "typeID": "__group__",
- "zOrder": "120",
- "measuredW": "142",
- "measuredH": "42",
- "w": "142",
- "h": "42",
- "x": "735",
- "y": "934",
- "properties": {
- "controlName": "109-go-advanced:mutex"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "142",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "w": "53",
- "measuredW": "50",
- "measuredH": "24",
- "x": "47",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Mutex"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3796",
- "typeID": "__group__",
- "zOrder": "121",
- "measuredW": "142",
- "measuredH": "42",
- "w": "142",
- "h": "42",
- "x": "735",
- "y": "979",
- "properties": {
- "controlName": "111-go-advanced:generics"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "142",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "66",
- "measuredH": "24",
- "x": "38",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Generics"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3797",
- "typeID": "__group__",
- "zOrder": "122",
- "measuredW": "133",
- "measuredH": "42",
- "w": "133",
- "h": "42",
- "x": "883",
- "y": "979",
- "properties": {
- "controlName": "112-go-advanced:pointers"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "133",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "60",
- "measuredH": "24",
- "x": "37",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "Pointers"
- }
- }
- ]
- }
- }
- },
- {
- "ID": "3798",
- "typeID": "__group__",
- "zOrder": "123",
- "measuredW": "93",
- "measuredH": "42",
- "w": "93",
- "h": "42",
- "x": "213",
- "y": "1038",
- "properties": {
- "controlName": "102-go-logging:log-slog"
- },
- "children": {
- "controls": {
- "control": [
- {
- "ID": "0",
- "typeID": "Canvas",
- "zOrder": "0",
- "w": "93",
- "h": "42",
- "measuredW": "100",
- "measuredH": "70",
- "x": "0",
- "y": "0",
- "properties": {
- "color": "16770457"
- }
- },
- {
- "ID": "1",
- "typeID": "Label",
- "zOrder": "1",
- "measuredW": "59",
- "measuredH": "24",
- "x": "17",
- "y": "9",
- "properties": {
- "size": "16",
- "text": "log/slog"
- }
- }
- ]
- }
- }
- }
- ]
+ "nodes": [
+ {
+ "width": 380,
+ "height": 49,
+ "id": "6AIUtChWC_gK8Ax0UuBjd",
+ "type": "button",
+ "position": {
+ "x": -270.4421681530645,
+ "y": 4436.848821438938
+ },
+ "selected": false,
+ "data": {
+ "label": "Frontend",
+ "href": "https://roadmap.sh/frontend",
+ "color": "#FFf",
+ "backgroundColor": "#4136D6",
+ "style": {
+ "fontSize": 17
},
- "attributes": {
- "name": "New Wireframe 1 copy 8",
- "order": 1000000.6428282561,
- "parentID": null,
- "notes": ""
- },
- "branchID": "Master",
- "resourceID": "960B5EDB-5533-4531-9B7D-06B4366EBEAE",
- "mockupH": "1547",
- "mockupW": "998",
- "measuredW": "1054",
- "measuredH": "1754",
- "version": "1.0"
- },
- "groupOffset": {
- "x": 0,
- "y": 0
- },
- "dependencies": [],
- "projectID": "file:///Users/kamrify/Desktop/New%20Roadmaps/Android%20Roadmap.bmpr"
+ "borderColor": "#4136D6",
+ "oldId": "f5WRewBlpeYMf71cPcXs-"
+ },
+ "zIndex": 999,
+ "dragging": false,
+ "positionAbsolute": {
+ "x": -270.4421681530645,
+ "y": 4436.848821438938
+ },
+ "style": {
+ "width": 380,
+ "height": 49
+ },
+ "focusable": true,
+ "resizing": false,
+ "selectable": true,
+ "measured": {
+ "width": 199,
+ "height": 49
+ }
+ }
+ ],
+ "edges": []
}
\ No newline at end of file
diff --git a/src/data/roadmaps/golang/golang.md b/src/data/roadmaps/golang/golang.md
index 8d3554ed3..bb1d47ba8 100644
--- a/src/data/roadmaps/golang/golang.md
+++ b/src/data/roadmaps/golang/golang.md
@@ -3,13 +3,14 @@ jsonUrl: '/jsons/roadmaps/golang.json'
pdfUrl: '/pdfs/roadmaps/golang.pdf'
order: 11
briefTitle: 'Go'
+renderer: 'editor'
briefDescription: 'Step by step guide to becoming a Go developer in 2025'
title: 'Go Developer'
description: 'Step by step guide to becoming a Go developer in 2025'
hasTopics: true
dimensions:
width: 968
- height: 1495.21
+ height: 4275
question:
title: What is Golang?
description: |
diff --git a/src/data/roadmaps/nodejs/content/chalk-package@V4OWIC1cnw8EFyu26Y_dA.md b/src/data/roadmaps/nodejs/content/chalk-package@V4OWIC1cnw8EFyu26Y_dA.md
index 54ca21c5e..52eddc956 100644
--- a/src/data/roadmaps/nodejs/content/chalk-package@V4OWIC1cnw8EFyu26Y_dA.md
+++ b/src/data/roadmaps/nodejs/content/chalk-package@V4OWIC1cnw8EFyu26Y_dA.md
@@ -5,4 +5,3 @@ Chalk is a clean and focused library used to do string styling in your terminal
Visit the following resources to learn more:
- [@opensource@Chalk Docs](https://github.com/chalk/chalk#readme)
-- [@article@Style Command Line Output with Chalk Package in Node.js](https://www.positronx.io/style-command-line-output-with-chalk-library-in-node-js/)
diff --git a/src/data/roadmaps/prompt-engineering/content/openai@Yb5cQiV2ETxPbBYCLOpt2.md b/src/data/roadmaps/prompt-engineering/content/openai@Yb5cQiV2ETxPbBYCLOpt2.md
index 661b82428..b30162b01 100644
--- a/src/data/roadmaps/prompt-engineering/content/openai@Yb5cQiV2ETxPbBYCLOpt2.md
+++ b/src/data/roadmaps/prompt-engineering/content/openai@Yb5cQiV2ETxPbBYCLOpt2.md
@@ -1,3 +1,3 @@
# OpenAI
-OpenAI developed influential language models including GPT-3, GPT-4, and ChatGPT, setting industry standards for prompt engineering practices. Their API provides access to powerful LLMs with configurable parameters like temperature and max tokens. Many prompt engineering techniques and best practices originated from working with OpenAI systems.
\ No newline at end of file
+OpenAI developed influential language models including GPT-3, GPT-4, and o3, setting industry standards for prompt engineering practices. Their API provides access to powerful LLMs with configurable parameters like temperature and max tokens. Many prompt engineering techniques and best practices originated from working with OpenAI systems.
diff --git a/src/data/roadmaps/react-native/content/what-is-react-native@cMfsRtvzvDZZJ0TqeUOxm.md b/src/data/roadmaps/react-native/content/what-is-react-native@cMfsRtvzvDZZJ0TqeUOxm.md
index f4a912d8e..4ca61cdc1 100644
--- a/src/data/roadmaps/react-native/content/what-is-react-native@cMfsRtvzvDZZJ0TqeUOxm.md
+++ b/src/data/roadmaps/react-native/content/what-is-react-native@cMfsRtvzvDZZJ0TqeUOxm.md
@@ -6,4 +6,4 @@ With React Native, you write components with JSX, a syntax that combines JavaScr
Visit the following resources to learn more:
-- [@official@Getting Started with React Native](https://reactnative.dev/docs/getting-started))
+- [@official@Getting Started with React Native](https://reactnative.dev/docs/getting-started)
diff --git a/src/data/roadmaps/spring-boot/spring-boot.json b/src/data/roadmaps/spring-boot/spring-boot.json
index db7b42ba5..aad2eb6ff 100644
--- a/src/data/roadmaps/spring-boot/spring-boot.json
+++ b/src/data/roadmaps/spring-boot/spring-boot.json
@@ -297,7 +297,7 @@
},
"selected": false,
"data": {
- "label": "Frontend Roadmap",
+ "label": "Java Roadmap",
"href": "https://roadmap.sh/java",
"color": "#FFf",
"backgroundColor": "#4136D6",
@@ -2844,4 +2844,4 @@
"selectable": true
}
]
-}
\ No newline at end of file
+}
diff --git a/src/helper/generate-ai-course.ts b/src/helper/generate-ai-course.ts
index 3aef15adc..3da92e263 100644
--- a/src/helper/generate-ai-course.ts
+++ b/src/helper/generate-ai-course.ts
@@ -4,7 +4,7 @@ import {
type AiCourse,
} from '../lib/ai';
import { queryClient } from '../stores/query-client';
-import { getAiCourseLimitOptions } from '../queries/ai-course';
+import { aiLimitOptions } from '../queries/ai-course';
import type { QuestionAnswerChatMessage } from '../components/ContentGenerator/QuestionAnswerChat';
type GenerateCourseOptions = {
@@ -157,7 +157,7 @@ export async function generateCourse(options: GenerateCourseOptions) {
.replace(CREATOR_ID_REGEX, '');
onLoadingChange?.(false);
- queryClient.invalidateQueries(getAiCourseLimitOptions());
+ queryClient.invalidateQueries(aiLimitOptions());
},
});
} catch (error: any) {
diff --git a/src/helper/generate-ai-guide.ts b/src/helper/generate-ai-guide.ts
index 350017424..fcc21c073 100644
--- a/src/helper/generate-ai-guide.ts
+++ b/src/helper/generate-ai-guide.ts
@@ -1,5 +1,5 @@
import { queryClient } from '../stores/query-client';
-import { getAiCourseLimitOptions } from '../queries/ai-course';
+import { aiLimitOptions } from '../queries/ai-course';
import { readChatStream } from '../lib/chat';
import { markdownToHtmlWithHighlighting } from '../lib/markdown';
import type { QuestionAnswerChatMessage } from '../components/ContentGenerator/QuestionAnswerChat';
@@ -114,7 +114,7 @@ export async function generateGuide(options: GenerateGuideOptions) {
onMessageEnd: async (message) => {
onGuideChange?.(message);
onHtmlChange?.(await markdownToHtmlWithHighlighting(message));
- queryClient.invalidateQueries(getAiCourseLimitOptions());
+ queryClient.invalidateQueries(aiLimitOptions());
onStreamingChange?.(false);
},
onDetails: async (details) => {
diff --git a/src/hooks/use-roadmap-ai-chat.tsx b/src/hooks/use-roadmap-ai-chat.tsx
index a73f9c736..11bdde4a2 100644
--- a/src/hooks/use-roadmap-ai-chat.tsx
+++ b/src/hooks/use-roadmap-ai-chat.tsx
@@ -4,7 +4,7 @@ import { flushSync } from 'react-dom';
import { removeAuthToken } from '../lib/jwt';
import { readStream } from '../lib/ai';
import { useToast } from './use-toast';
-import { getAiCourseLimitOptions } from '../queries/ai-course';
+import { aiLimitOptions } from '../queries/ai-course';
import { queryClient } from '../stores/query-client';
import {
renderMessage,
@@ -184,7 +184,7 @@ export function useRoadmapAIChat(options: Options) {
removeAuthToken();
window.location.reload();
}
- queryClient.invalidateQueries(getAiCourseLimitOptions());
+ queryClient.invalidateQueries(aiLimitOptions());
return;
}
@@ -225,7 +225,7 @@ export function useRoadmapAIChat(options: Options) {
setIsStreamingMessage(false);
setAiChatHistory(newMessages);
});
- queryClient.invalidateQueries(getAiCourseLimitOptions());
+ queryClient.invalidateQueries(aiLimitOptions());
queryClient.invalidateQueries({
predicate: (query) => {
return (
diff --git a/src/hooks/use-verify-answer.ts b/src/hooks/use-verify-answer.ts
new file mode 100644
index 000000000..6580a0a28
--- /dev/null
+++ b/src/hooks/use-verify-answer.ts
@@ -0,0 +1,133 @@
+import { useCallback, useRef, useState } from 'react';
+import { removeAuthToken } from '../lib/jwt';
+import { readChatStream } from '../lib/chat';
+import { flushSync } from 'react-dom';
+import type { VerifyQuizAnswerResponse } from '../components/AIQuiz/AIOpenEndedQuestion';
+
+type VerifyAnswerResponse = {
+ status?: VerifyQuizAnswerResponse['status'];
+ feedback?: string;
+};
+
+type UseVerifyAnswerOptions = {
+ quizSlug: string;
+ question: string;
+ userAnswer: string;
+
+ onError?: (error: Error) => void;
+ onFinish?: (data: VerifyAnswerResponse) => void;
+};
+
+export function useVerifyAnswer(options: UseVerifyAnswerOptions) {
+ const { quizSlug, question, userAnswer, onError, onFinish } = options;
+
+ const abortControllerRef = useRef(null);
+
+ const contentRef = useRef(null);
+ const [data, setData] = useState(null);
+
+ const [status, setStatus] = useState<
+ 'idle' | 'streaming' | 'loading' | 'ready' | 'error'
+ >('idle');
+
+ const verifyAnswer = useCallback(async () => {
+ try {
+ setStatus('loading');
+ abortControllerRef.current?.abort();
+ abortControllerRef.current = new AbortController();
+
+ const response = await fetch(
+ `${import.meta.env.PUBLIC_API_URL}/v1-verify-quiz-answer/${quizSlug}`,
+ {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({ question, userAnswer }),
+ signal: abortControllerRef.current?.signal,
+ credentials: 'include',
+ },
+ );
+
+ if (!response.ok) {
+ const data = await response.json();
+ setStatus('error');
+ if (data.status === 401) {
+ removeAuthToken();
+ window.location.reload();
+ }
+
+ throw new Error(data?.message || 'Something went wrong');
+ }
+
+ const stream = response.body;
+ if (!stream) {
+ setStatus('error');
+ throw new Error('Something went wrong');
+ }
+
+ await readChatStream(stream, {
+ onMessage: async (content) => {
+ flushSync(() => {
+ setStatus('streaming');
+ contentRef.current = parseVerifyAIQuizAnswerResponse(content);
+ setData(contentRef.current);
+ });
+ },
+ onMessageEnd: async () => {
+ flushSync(() => {
+ setStatus('ready');
+ });
+ },
+ });
+
+ setStatus('idle');
+ abortControllerRef.current = null;
+
+ if (!contentRef.current) {
+ setStatus('error');
+ throw new Error('Something went wrong');
+ }
+
+ onFinish?.(contentRef.current);
+ } catch (error) {
+ if (abortControllerRef.current?.signal.aborted) {
+ // we don't want to show error if the user stops the chat
+ // so we just return
+ return;
+ }
+
+ onError?.(error as Error);
+ setStatus('error');
+ }
+ }, [quizSlug, question, userAnswer, onError]);
+
+ const stop = useCallback(() => {
+ if (!abortControllerRef.current) {
+ return;
+ }
+
+ abortControllerRef.current.abort();
+ abortControllerRef.current = null;
+ }, []);
+
+ return {
+ data,
+ status,
+ stop,
+ verifyAnswer,
+ };
+}
+
+export function parseVerifyAIQuizAnswerResponse(
+ response: string,
+): VerifyQuizAnswerResponse {
+ const statusRegex = /(.*?)<\/status>/;
+ const status = response.match(statusRegex)?.[1]?.trim();
+ const responseWithoutStatus = response.replace(statusRegex, '').trim();
+
+ return {
+ status: status as VerifyQuizAnswerResponse['status'],
+ feedback: responseWithoutStatus,
+ };
+}
diff --git a/src/icons/bolt.svg b/src/icons/bolt.svg
new file mode 100644
index 000000000..f0b0e00c0
--- /dev/null
+++ b/src/icons/bolt.svg
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
index aefd62d23..6f6a03b53 100644
--- a/src/layouts/BaseLayout.astro
+++ b/src/layouts/BaseLayout.astro
@@ -21,7 +21,9 @@ import { siteConfig } from '../lib/config';
import type { ResourceType } from '../lib/resource-progress';
import Bluconic from '../components/Analytics/Bluconic.astro';
import OneTrust from '../components/Analytics/OneTrust.astro';
+import LinkedIn from '../components/Analytics/LinkedIn.astro';
import { cn } from '../lib/classname';
+import { GlobalUpgradeModal } from '../components/Billing/GlobalUpgradeModal';
export interface Props {
title: string;
@@ -49,7 +51,7 @@ const {
bodyClassName,
briefTitle,
description = siteConfig.description,
- ogImageUrl = 'https://roadmap.sh/images/og-img.png',
+ ogImageUrl = 'https://roadmap.sh/img/og-img.png',
keywords = siteConfig.keywords,
noIndex = false,
permalink = '',
@@ -104,7 +106,7 @@ const gaPageIdentifier = Astro.url.pathname
@@ -250,6 +252,7 @@ const gaPageIdentifier = Astro.url.pathname
+
@@ -259,5 +262,7 @@ const gaPageIdentifier = Astro.url.pathname
resourceType={resourceType}
client:load
/>
+
+ {!import.meta.env.DEV && }