Some slight changes/extensions to birdpup's answer.
1. The Harlowe equivalent to the StoryInit special passage is the startup tagged special passage.
Simple create a new passage and give it whatever name you like, then assign it a tag of startup and place the code to initialise your story variables within it like so.
(set: $kiyokoAffection to 0)
2. As explained in the (set:) macro's documentation there are two main syntax's you can use to increase the numerical value of a variable.
(set: $kiyokoAffection to $kiyokoAffection + 5)
(set: $kiyokoAffection to it + 5)
... I prefer to use the second as it requires less typing.
3. If you add the following converted (if:)/(else-if:)/(else:) macro structure
(if: $kiyokoAffection gte 75)[\
I love you!
](else-if: $kiyokoAffection gte 50)[\
I like you.
](else-if: $kiyokoAffection gte 25)[\
I don't like you
](else:)[\
I dislike you
]
to the Harlowe passage editor it will highlight that there is an issue with the gte keyword, and if you use the Test option to view that passage then the resulting page with include error messages suggesting what the problem with the gte keyword is and how to fix it.
If you follow the error message's suggests you will end up with code like the following, which should function the way you want it to.
(if: $kiyokoAffection >= 75)[\
I love you!
](else-if: $kiyokoAffection >= 50)[\
I like you.
](else-if: $kiyokoAffection >= 25)[\
I don't like you
](else:)[\
I dislike you
]
4. You should not use the is keyword with the mathematical notation comparison operators.
BAD: (if: $kiyokoAffection is >= 75)[I love you!]
GOOD: (if: $kiyokoAffection >= 75)[I love you!]
...while Harlowe 2.x has been modified to support people doing this it is the same as saying that the variable's value must exactly equal 75 while also saying that it must be greater-than-or-equal-to 75 at the same time, and that doesn't make logical sense.
5. You need to restate the variable name when doing multiple comparisons, even if they are on the same variable.
BAD: (elseif: $kiyokoAffection is >= 50 and < 75)[I like you.]
GOOD: (else-if: $kiyokoAffection >= 50 and $kiyokoAffection < 75)
ALSO: (else-if: $kiyokoAffection >= 50 and it < 75)
... in the BAD example you are relying on the Harlowe parser to guess what you wanted and it could guess wrong, always tell it exactly what you want. Also there are situations (eg. boolean values) where the guess may seem to work correctly but it will probably be working for the wrong reasons.
edit:
6. Use CSS like the following in your Story Stylesheet area to hide any visual output generated by the startup tagged passage.
tw-include[type="startup"]{
display: none;
}