Just in case you never got around to googling that, a pipe character takes the output from one command and sends it to the input of the next command. Piping the output from STDOUT of the first to STDIN of the next. The semicolon character is similar to a newline as far as the shell is concerned, it just says "do this command, then do the next command".
I think if this were up to me, I'd probably write it like:
cd path/to/my/jekyll/website/folder && bundle exec jekyll serve && sleep 10 && open -a Safari http://127.0.0.1:4000/
&& operator tells the shell to only execute the next command if the previous one completed successfully.
However, you've probably already discovered that this won't work either because
jekyll serve won't run in the background, and we don't really want it to anyway. What we really want is a recent version of Jekyll and to run this command:
cd ~/path/to/site && jekyll serve -l -o
This will reload the site live as you make changes to it, and automatically open the site in your default browser.