Seema Rizvi, Author at ProdSens.live https://prodsens.live/author/seema-rizvi/ News for Project Managers - PMI Sun, 28 Apr 2024 06:20:29 +0000 en-US hourly 1 https://wordpress.org/?v=6.5.5 https://prodsens.live/wp-content/uploads/2022/09/prod.png Seema Rizvi, Author at ProdSens.live https://prodsens.live/author/seema-rizvi/ 32 32 Front-end specialisations: Design systems https://prodsens.live/2024/04/28/front-end-specialisations-design-systems/?utm_source=rss&utm_medium=rss&utm_campaign=front-end-specialisations-design-systems https://prodsens.live/2024/04/28/front-end-specialisations-design-systems/#respond Sun, 28 Apr 2024 06:20:29 +0000 https://prodsens.live/2024/04/28/front-end-specialisations-design-systems/ front-end-specialisations:-design-systems

The “Design Systems” specialization in frontend development focuses on creating and maintaining consistent, reusable design patterns, components, and…

The post Front-end specialisations: Design systems appeared first on ProdSens.live.

]]>
front-end-specialisations:-design-systems

The “Design Systems” specialization in frontend development focuses on creating and maintaining consistent, reusable design patterns, components, and guidelines that ensure a cohesive and user-friendly experience across digital products and platforms. Here’s a detailed overview of this specialization:

  1. Component Library Development:

    • Componentization: Breaking down user interface elements into reusable components, such as buttons, forms, cards, and navigation bars, that can be easily assembled and customized to create consistent UI designs.
    • Atomic Design Principles: Following atomic design principles (atoms, molecules, organisms, templates, pages) to structure and organize components at different levels of abstraction and complexity.
  2. Design Language and Guidelines:

    • Visual Language: Defining a visual language that encompasses typography, color palettes, spacing, and other design elements to maintain visual consistency and brand identity across products.
    • Design Principles: Establishing design principles and guidelines that govern how components should be designed, implemented, and used to ensure consistency, accessibility, and usability.
    • Pattern Libraries: Creating pattern libraries or design systems documentation that document design patterns, usage guidelines, and best practices for designers and developers.
  3. Responsive Design and Adaptability:

    • Responsive Components: Designing components and layouts that adapt gracefully to different screen sizes, resolutions, and devices, ensuring a seamless user experience across desktops, tablets, and smartphones.
    • Flexibility and Customization: Building components with flexibility and customization in mind, allowing designers and developers to adjust styles, layouts, and behaviors to meet specific design requirements and user needs.
  4. Cross-functional Collaboration:

    • Design-Development Collaboration: Fostering collaboration between designers and developers to ensure alignment between design vision and implementation, and to facilitate the integration of design systems into frontend development workflows.
    • Stakeholder Engagement: Engaging stakeholders across the organization, including product managers, marketers, and executives, to gather feedback, validate design decisions, and promote adoption of the design system.
  5. Tooling and Workflow Integration:

    • Design Tools Integration: Integrating design tools (e.g., Sketch, Figma, Adobe XD) with development workflows to enable seamless handoff of design assets, specifications, and prototypes to developers.
    • Version Control and Documentation: Using version control systems (e.g., Git) to manage changes to design system components and documentation, and ensuring that design system assets are well-documented and easily accessible to all team members.
  6. Maintenance and Evolution:

    • Iterative Improvement: Continuously iterating and improving the design system based on user feedback, usability testing, and evolving design trends and technologies.
    • Governance and Maintenance: Establishing governance processes and roles to oversee the maintenance, evolution, and governance of the design system, including versioning, deprecation, and retirement of components.

By specializing in design systems, frontend developers can streamline the design and development process, improve consistency and efficiency, and ultimately deliver better user experiences across digital products and platforms. This specialization requires a combination of design skills, technical expertise, collaboration abilities, and a deep understanding of user-centered design principles.

The post Front-end specialisations: Design systems appeared first on ProdSens.live.

]]>
https://prodsens.live/2024/04/28/front-end-specialisations-design-systems/feed/ 0
Animation can make bell🔔 much more than emoji! https://prodsens.live/2024/04/19/animation-can-make-bell%f0%9f%94%94-much-more-than-emoji/?utm_source=rss&utm_medium=rss&utm_campaign=animation-can-make-bell%25f0%259f%2594%2594-much-more-than-emoji https://prodsens.live/2024/04/19/animation-can-make-bell%f0%9f%94%94-much-more-than-emoji/#respond Fri, 19 Apr 2024 10:20:35 +0000 https://prodsens.live/2024/04/19/animation-can-make-bell%f0%9f%94%94-much-more-than-emoji/ animation-can-make-bell-much-more-than-emoji!

We all use wave 🔔 emoji a lot in web apps! Next time when you use it, try…

The post Animation can make bell🔔 much more than emoji! appeared first on ProdSens.live.

]]>
animation-can-make-bell-much-more-than-emoji!

We all use wave 🔔 emoji a lot in web apps!

Next time when you use it, try to add a simple wave animation to it…

@keyframes bell-keyframes {
  0% {
    transform: rotate(0deg);
  }
  10% {
    transform: rotate(14deg);
  }
  20% {
    transform: rotate(-8deg);
  }
  30% {
    transform: rotate(14deg);
  }
  40% {
    transform: rotate(-4deg);
  }
  50% {
    transform: rotate(10deg);
  }
  60% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(0deg);
  }
}

.bell-animation {
  animation-duration: 1s;
  animation-iteration-count: var(--times, 1);
  animation-name: bell-keyframes;
  transform-origin: top center;
}

I have also created a codepen for it:

The post Animation can make bell🔔 much more than emoji! appeared first on ProdSens.live.

]]>
https://prodsens.live/2024/04/19/animation-can-make-bell%f0%9f%94%94-much-more-than-emoji/feed/ 0
AI in healthcare: The promise and peril of transformation with a safety-first approach https://prodsens.live/2024/04/19/ai-in-healthcare-the-promise-and-peril-of-transformation-with-a-safety-first-approach/?utm_source=rss&utm_medium=rss&utm_campaign=ai-in-healthcare-the-promise-and-peril-of-transformation-with-a-safety-first-approach https://prodsens.live/2024/04/19/ai-in-healthcare-the-promise-and-peril-of-transformation-with-a-safety-first-approach/#respond Fri, 19 Apr 2024 10:20:13 +0000 https://prodsens.live/2024/04/19/ai-in-healthcare-the-promise-and-peril-of-transformation-with-a-safety-first-approach/ ai-in-healthcare:-the-promise-and-peril-of-transformation-with-a-safety-first-approach

For all its promise, integrating AI into healthcare demands a safety-first mindset. This article looks at why we…

The post AI in healthcare: The promise and peril of transformation with a safety-first approach appeared first on ProdSens.live.

]]>
ai-in-healthcare:-the-promise-and-peril-of-transformation-with-a-safety-first-approach

For all its promise, integrating AI into healthcare demands a safety-first mindset. This article looks at why we must prioritize patient well-being, navigate ethical complexities, and address potential risks to fully realize the positive impact of this technology. Read more »

The post AI in healthcare: The promise and peril of transformation with a safety-first approach appeared first on Mind the Product.

The post AI in healthcare: The promise and peril of transformation with a safety-first approach appeared first on ProdSens.live.

]]>
https://prodsens.live/2024/04/19/ai-in-healthcare-the-promise-and-peril-of-transformation-with-a-safety-first-approach/feed/ 0
The new CSS pseudo-classes explained :has() https://prodsens.live/2023/12/29/the-new-css-pseudo-classes-explained-has/?utm_source=rss&utm_medium=rss&utm_campaign=the-new-css-pseudo-classes-explained-has https://prodsens.live/2023/12/29/the-new-css-pseudo-classes-explained-has/#respond Fri, 29 Dec 2023 17:24:27 +0000 https://prodsens.live/2023/12/29/the-new-css-pseudo-classes-explained-has/ the-new-css-pseudo-classes-explained-:has()

Technology: CSS Topic: Pseudo-classess explained Version: 1.1 Author: Cezary Mazur Author Website: https://cezarymazur.pl CSS is developing more and…

The post The new CSS pseudo-classes explained :has() appeared first on ProdSens.live.

]]>
the-new-css-pseudo-classes-explained-:has()

Technology: CSS
Topic: Pseudo-classess explained
Version: 1.1
Author: Cezary Mazur
Author Website: https://cezarymazur.pl

CSS is developing more and more. In addition to various frameworks based on CSS or Sass (BootstrapCSS, TailwindCSS), CSS assembly itself is developing based on the needs and problems reported by developers. With development comes changes, new products, and often new things that are intended to make our programmers’ lives easier. This is also the case with the new pseudo-classes in CSS.

In today’s article I will briefly focus on the new pseudo-class :has().
This article will explain:

  1. What is the :has() pseudo-class and what does it refer to?
  2. How to use the :has() pseudo-class in practice?
  3. Examples of using the :has() pseudo-class

If you are interested in how to start with TailiwndCSS, check out my latest article about: Tailwind CSS – Beginner’s Guide: Where to Start?

1. What is the :has() pseudo-class?

To explain what the :has() pseudo-class is, first we need to explain what pseudo-classes in CSS are.

A pseudo-class is a keyword added to a css selector that specifies a special state of the selector.

The basic pseudo-classes are, for example:

  • :hover – state after hovering over the element
  • :focus – state when focusing on an element
  • :active – element activity status

We already know what a pseudo-class is, so now let’s say what a :has() pseudo-class is responsible for

The :has() pseudo-class selects an element containing the specified content. For example, a:has(img) selects all elements containing a child element.

Image show css on screen

2. How to use the :has() pseudo-class in practice?

:has() in CSS is like a special tool that allows you to change the appearance of a parent element based on whether it contains a specific child or another element. This might seem a bit different from how we usually think about CSS, where styles are applied from parent to child. Until now, there hasn’t been a direct way to style the parent based on its content, and there are technical reasons for that.

For example, you might want to style links only if they have images inside them. With :has() you can do this. This opens up new possibilities, like adding styles conditionally depending on the content of an element, which wasn’t easily achievable with standard CSS.

The :has() selector is part of the CSS Selectors Level 4 specification, the same set of rules that include the handy :not() pseudo-class.

3. Examples of using a pseudo-class :has()

Let’s assume you want to add a bottom margin to the element, but (!) only to the one that contains the element:

.a:has(img) {
  margin: 0 0 2em 0;
}

or depending on whether there is a subheading under the heading, you want to increase or decrease the bottom margin:

.heading h2 {
margin: 0 0 1.5em 0;
}

.heading-group:has(h2):has(.subtitle) h2 {
margin: 0 0 2em 0;
}

Heading styling css with :has

You could argue that the CSS :has() selector goes beyond being just a “parent” selector, and that’s exactly what it is! In the example with subheadings, it’s not necessarily about selecting the ultimate parent; instead, you might choose the parent based on a condition and then proceed to select a child element from there.

For instance:

figure:has(figcaption) { ... }

figure:has(figcaption) img { ... }

Here, the second selector specifically targets a child , not just the parent containing the

.

Summary

Time passes quickly and technologies, even as basic as CSS, are developing. In order not to be left behind, it is worth following the news and learning how to make even better use of what we have all known well for years. Thanks to this approach, we will be able to be and become programmers who are desirable in the labor market. And the work itself will bring more joy. Therefore, from now on, you can safely use the :has() pseudo-class, which will make your everyday work easier and faster 😄

Visit cezarymazur.pl

💬 Your Thoughts Matter!

We’d love to hear your thoughts on CSS and the different usage of CSS pseudo-classes. Have you used them in your projects? What has been your experience? Share your insights, suggestions, or any challenges you’ve faced in the comments below.

❤ React, Share, Save

If you found this article helpful, consider sharing it with your fellow developers. React to the content and save it for future reference. Your engagement fuels our commitment to bringing you more insightful content.

Visit cezarymazur.pl for more front-end development tips and tricks. Stay tuned for regular updates and in-depth tutorials to level up your coding game.

🎉 Happy coding!

The post The new CSS pseudo-classes explained :has() appeared first on ProdSens.live.

]]> https://prodsens.live/2023/12/29/the-new-css-pseudo-classes-explained-has/feed/ 0 TIL – Today I Learn 12-11 18-11 parte 2 https://prodsens.live/2023/12/08/til-today-i-learn-12-11-18-11-parte-2/?utm_source=rss&utm_medium=rss&utm_campaign=til-today-i-learn-12-11-18-11-parte-2 https://prodsens.live/2023/12/08/til-today-i-learn-12-11-18-11-parte-2/#respond Fri, 08 Dec 2023 21:24:39 +0000 https://prodsens.live/2023/12/08/til-today-i-learn-12-11-18-11-parte-2/ til-–-today-i-learn-12-11-18-11-parte-2

@piluvitu .env Para quem não sabe o seu sistema por padrão tem variáveis de ambiente, que servem para…

The post TIL – Today I Learn 12-11 18-11 parte 2 appeared first on ProdSens.live.

]]>
til-–-today-i-learn-12-11-18-11-parte-2

@piluvitu

.env

  • Para quem não sabe o seu sistema por padrão tem variáveis de ambiente, que servem para armazenar alguma informação e padronizar o acesso dela pela mesma.
    • É possível inserir váriáveis no próprio sistema sem precisar de nem uma abstração, mas ela não são inserções persistentes, por isso a fim de facilitar a definição dessas variáveis, existe o módulo do NPM .env, que foi criado a fim de facilitar isso.
  • Para usa-lo tudo que é necessário fazer é criar um arquivo .env na raiz do projeto e inserir as variáveis com a seguinte sintaxe:
  • O modelo é chave – valor, com a chave sendo por padrão MAIUSCULA

OPENIA_KEY = informação sensivel URL = localhost PORT = 3000

  • Muito se é discutido em upar ou não o .env então devemos explicar o comportamento dele no sistema:
  • .env.development – serve para um ambiente de desenvolvimento
  • .env.example – serve como um arquivo de exemplo
  • .env – é o arquivo padrão, que em teoria seria usado para inserir as variáveis de produção.

  • Muitos dos provedores onde podemos subir nossas aplicações de maneira facilitada, disponibilizam uma parte para inserirmos as variáveis de ambiente que serão utilizadas na nossa aplicação e por ordem de importância essas variáveis inseridas antes do deploy, são as que vão realmente sobrepor as que ficam no .env.

    GIT

  • Pensando nisso o GitHub fez um artigo que sugere usar uma ferramenta do próprio git ou uma ferramenta open-source

    • Falando em git, descobri que tem como renomear arquivos usando o próprio git usando o comando git mv:
      git mv

Absolute PATH

  • Eu nunca tinha parado para pensar que, quando queremos acessar algum arquivo que está fora da pasta atual:
    1 – Navegamos para fora da pasta atual
    2 – Entramos na pasta do arquivo
    3 – Por fim referenciamos o mesmo.
  • O nome disso é relative PATH e percebemos que priemeiro voltamos para depois seguir em frente, que em um projeto com muitos arquivos gera um PATH longo e nada didático
    • Já o absolute PATH é o caminho absoluto, que toma como padrão sempre sair da raiz do projeto e ir para o arquivo desejado, encurtando o PATH e deixando didático
  • Fica a dúvida de como eles fazem para referenciar o diretório raiz do projeto ?
  • Existem várias soluções no mercado, mas a microsoft desenvolveu os arquivos jsconfig.json e tsconfig.json que servem para indicar ao editor que ali é a raiz do projeto.

TypeScript

Por fim o typescript, meu primeiro contato sem auxilio de curso tem sido aqui na devhat, no projeto octopost, mal conheço e já considero pacas esse TS, estou fazendo minha introdução pelo curso da origamid.

  • Estudei conceitos básicos de annotation, inferface e inferência.
// Annotation
const produt0: string = 'Livro'

let prec0: number = 856
  • No TypeScript podemos tipar, e isso é interessante pois evitamos erros na hora de lidar com os dados

Interface

// Interface
const carr0: {
  marca: string
  portas: number
  motor: number
} = {
  marca: 'audi',
  portas: 2,
  motor: 3.0
}

carro.marca = 245
carro.portas = '2'
carro.motor = ['aspirado', 'alumínio']

Inferência

/* Mesmo sem declarar a tipagem, alguns tipos de variáveis o TS, 
já identifica a tipagem correta */

// Annotation
const produtos = 'Livro'

let preco = 856

preco = 'jajaja'

// Interface
const carro = {
  marca: 'audi',
  portas: 2,
  motor: 3.0
}

carro.marca = 245
carro.portas = '2'
carro.motor = ['aspirado', 'alumínio']
  • Como pode-se ver no exemplo acima, podemos deixar de declarar a tipagem de alguns dados que o proprio TypeScript já reconhece.
function somar(a: number, b: number){
    return a + b;
}
soma(4, 10)
soma(4, "10")
  • No exemplo acima é possivel ver um otimo motivo para tipar, pois saberemos o que é para chegar no parâmetro e o que será retornado

FunFact

  • O vsCode tem intelisense de JS graças ao TS nativamente no editor, caso queira ter um pouco da experiência de usar TS no JS é só adicionar //@ts-check na primeira linha do seu arquivo JS e o editor vai passar a indicar alguns erros que o TS pegaria no seu código

@hxsggsz

Typescript

Essa semana eu estudei bastante Typescript pra tentar resolver um problema. Durante esse estudo eu descobri alguns Utilities Types criados pelo próprio time do Typescript pra facilitar a nossa vida difícil de bugs.

Como esses “Utilities Types” funcionam

Todos eles se beneficiam dos “Generics”, algo muito útil na hora de tipagem e que é presente em diversas linguagens estaticamente tipadas.

Partial

O que ele faz? Ele transforma tudo em um objeto opcional. Olha esse exemplo:

interface User {
    id: string
    name: string
    role: "admin" | "user"
}

Agora se a gente taca essa interface no Partial assim:

type OptionalUser = Partial<User>

É como se a gente fizesse isso

interface User {
    id?: string
    name?: string
    role?: "admin" | "user"
}

Required

Existe o oposto do Partial que é o Required, e como o nome já diz, ele transforma todos os tipos que ele receber para necessário fornecer, até os que originalmente são opicionais

type OptionalUser = Partial<User>

type RequiredUser = Required<OptionalUser>

E agora o tipo RequiredUser fica assim

interface User {
    id: string
    name: string
    role: "admin" | "user"
}

Omit

Agora imagina que a gente quer omitir o nome da interface User sem alterar a interface original, essa é a função do Omit.

type UserWithouName = Omit<User, "name">

Pick

E tem o contrario também, imagina que a gente quer pegar apenas a propriedade nome da interface mas sem alterar a interface original, o Pick serve pra isso.

type UserName = Pick<User, "name">

Se você quiser pegar ou excluir mais de uma propriedade, basta usar o pipeline

type UserName = Pick<User, "id" | "name">

// ou 

type UserName = Omit<User, "id" | "name">

É possível combinar todos esses Utilities Types também

type UserNameOptional = Partial<Pick<User, "name">>

ReturnType

Agora imagina que a gente tem esse tipagem de função aqui:

type HandleSomething = () => string

E você precisa ter a tipagem do retorno dessa função, pra isso existe o ReturnType

type ReturnOfHandleSomething = ReturnType<HandleSomething>

Awaited

Imagina que você tem uma tipagem que é uma promise

type AwaitSomething = Promise<string>

E você quer a tipagem que essa promise vai retornar, pra isso serve o Awaited

type Result = Awaited<AwaitSomething>

Agora um caso um pouco mais real, você tipou uma função que retorna uma promise e você quer separar um type diferente o retorno dessa função, simples:

type UserNameOptional = () => Promise<string>;



type Result = Awaited<ReturnType<UserNameOptional>>;

Um exemplo com uma função real

async function awaitSomething() {
  await new Promise(() => setTimeout(() => "demorei mas cheguei", 1000));
}

// string
type Result = Awaited<ReturnType<typeof awaitSomething>>; 

The post TIL – Today I Learn 12-11 18-11 parte 2 appeared first on ProdSens.live.

]]>
https://prodsens.live/2023/12/08/til-today-i-learn-12-11-18-11-parte-2/feed/ 0
Top ten best practices for driving customer demand https://prodsens.live/2023/11/03/top-ten-best-practices-for-driving-customer-demand/?utm_source=rss&utm_medium=rss&utm_campaign=top-ten-best-practices-for-driving-customer-demand https://prodsens.live/2023/11/03/top-ten-best-practices-for-driving-customer-demand/#respond Fri, 03 Nov 2023 18:25:13 +0000 https://prodsens.live/2023/11/03/top-ten-best-practices-for-driving-customer-demand/ top-ten-best-practices-for-driving-customer-demand

This article is based on a presentation by Seema and Shanann at the Customer Marketing Summit. Catch up…

The post Top ten best practices for driving customer demand appeared first on ProdSens.live.

]]>
top-ten-best-practices-for-driving-customer-demand

Top ten best practices for driving customer demand

This article is based on a presentation by Seema and Shanann at the Customer Marketing Summit.

Catch up on this presentation, and others, using our OnDemand service. For more exclusive content, visit your membership dashboard.


Hi, everybody. Thanks so much for joining us today to learn about our top 10 tips for driving customer demand. We’re Shanann Monaghan and Seema Rizvi, and we work at Google Cloud building upsell and cross-sell programs across our portfolio of products. 

We’re very excited to share our top tips for building a powerful upsell engine that drives value for your customers and revenue for your business. 

If you’re just getting started with building upsell programs and campaigns, our tips are laid out in our suggested order of operation. 

Tip number one is your starting point, and then we’ll layer on tips two, three, four, etc. until you have a well-built upsell engine by tip number 10. That means even if you’re already an upselling expert, hopefully we’ll have a couple of new ideas for you today. 

Let’s go ahead and jump right into tip number one. 

Tip #1: Outline your vision for customer growth

This tip is a foundational starting point. What are you trying to build? How will it help your business? 

In most businesses, you reach a tipping point where your customer base becomes big enough that it drives as much or more revenue than your net new prospects.

This is when it becomes critical for marketing to build a truly full-funnel lead generation engine. You’re not only acquiring new business, but you’re also engaging and growing your existing customer base. 

Top ten best practices for driving customer demand

The image above is that full-funnel marketing engine. All marketing organizations start by prospecting and acquiring new business. However, over time, you need to invest in engaging and growing your existing customer base as well. Ultimately, the customers who are engaged and growing are the ones who’ll become your advocates.

The post Top ten best practices for driving customer demand appeared first on ProdSens.live.

]]>
https://prodsens.live/2023/11/03/top-ten-best-practices-for-driving-customer-demand/feed/ 0