Declension patterns in Czech is traditionally categorized into hard and soft ones based on the final consonant of the stem. Materials for learners, e.g., Lída's Czech Step by Step or Michael's Contemporary Czech, summarize (in a quite simplified manner, I think) historical developments of the language, saying that soft consonants makes the following vowels fronted and vise versa, and attribute the aforementioned categorization to this development. The said two sources, however, do not actually detail how this sound change can explain the relationships between concrete hard and soft paradigms. Is there a learning material that spells out how a soft paradigm can be obtained by a hard one by applying the sound change?
Balto-Slavic languages developed their own way to decline adjectives, by combining the nominal forms with the forms of personal pronouns (In Slavic *jъ, ja, je).
Many Slavic languages (e.g., Russian) still allow the old nominal declension, but Czech mostly allows only the modern compound declension. Wikipedia calls these short and long https://en.wikipedia.org/wiki/Old_Church_Slavonic_grammar#Adjectives
The difference between the hard and the soft declension already existed in Proto-Slavic, and is documented in Old Church Slavonic. The hard declension is declined according from the o-stems in masculine and neuter and a-stems in feminine. The soft declension is done according the jo-stems in masculine and neuter and ja-stems in neuter.
masculine o-stems: "Nouns belonging to this declension class are generally masculines ending in -ъ in the nominative singular (bogъ, gradъ, rodъ)."
neuter o-stems: "Nouns belonging to this declension class are neuters ending in -o in the nominative singular (selo, lěto, město)"
masculine jo-stems: "Nouns belonging to this declension class are masculines ending in -ь preceded by a palatal in the nominative singular (vračь, kralь, košь)"
neuter jo-stems: "The jo-stem declension class encompasses neuters ending in -e (lože, polje, molenьe)."
In OCS that is the palatal vs. non-palatal end in the nominative singular while after the Old Czech stage it is the hard vs. soft consonant. I am not sure how much you are interested about the developments of the consonants during Proto-Czech and Old-Czech. It is a whole topic on its own and it is probably better to point you at Pavel Kosek - Historická mluvnice češtiny I for the morphology and Pavel Kosek - Historická mluvnice češtiny – překlenovací seminář for the phonology if you understand Czech. From the latter source, the most relevant parts are sections: "Fonologický systém pračeštiny", "Rozvinutí korelace měkkosti", "Pračeská depalatelizace", "Historická depalatalizace".
The difference of i-y was not just orthogaphical, as in modern Czech, but those two letters marked different phonemes. However, due to the Proto-Czech depalatalization, one actually got y in the soft declension after c, z, s (orig. c´, z´, s´) because they became "hard". Another depalatalization at the and of the Old-czech stage completely removed palatalized consonants and i and y merged. The Czech orthography kept this artefact for a long time, but a spelling reform at the beginning of the 19. century changed it to i. (c´yz´ý -> cyzý -> cizí).
hard consonsants: h, ch, k, r, d, t, n
vlahý, kruchý, velký, sporý, mladý, dutý, volný
ambivalent consonants mostly: b, f, l, m, p, s, v, z
slabý, malý, slepý,
soft consonants: ž, š, č, ř, ť, c*, j, ď, ť, ň
boží, hroší, ptačí, zubří, jarní...
(*There are arguments for c being ambivalent with a hypothetical adjective bezkopcý, bezkopcá, bezkopcé. However, you won't find it in any dictionary.)
As already noted, the forms changed considerably in Old Czech:
*dobrъjь - dobrý
*dobroje - dobré
*dobraja - dobrá
*pěšiji - pěší
*pěšaja - pěšie (-> modern pěší)
*pěšějě - pěšie (->modern pěší)